我正在尝试将asp.net c#Web项目从框架2.0升级到3.5。

当我这样做时,使用RegisterStartupScript编写的客户端脚本不会呈现在客户端页面上。

当我针对2.0和3.0进行编译时,此方法非常有效,但当我针对3.5进行编译时,则无效。

以下是未渲染的代码:

Page myPage = (Page)HttpContext.Current.Handler;
ScriptManager.RegisterStartupScript(myPage, myPage.GetType(), "alertscript", "alert('test');", true);


这是从类项目而不是Web项目本身调用的,这就是为什么我使用HttpContext.Current.Handler的原因。

没有从编译器,CLR生成的错误,也没有客户端JavaScript错误。

如果我在渲染的页面中搜索“ alertscript”,则上面的代码实际上不存在。

任何人都对发生的事情有想法吗?

-编辑-

当我尝试从外部项目注册脚本时,这似乎是一个问题。

如果我在Web项目的类文件中使用完全相同的代码(而不是后面的代码),则它可以工作。但是,如果我从另一个项目中调用类中的方法,则该方法不起作用。

如果从Web项目本身之外的其他地方执行,ScriptManager.RegisterStartupScript是否无法正确注册?

-编辑2-

要添加更多内容,我做了以下工作:


从我的Web项目类中注册了警报脚本
在外部类中调用方法并仅注册了另一个警报脚本
从我的Web项目类中注册了另一个警报脚本


完成所有这些操作后,如果我查看Web项目中的变量:myPage.ClientScript._registeredClientStartupScripts,则可以看到这三个新条目,每个刚注册的脚本一个。因此,我相信所有内容均已正确添加。

但是,当我让页面完成执行并查看fiddler中的结果时,我只看到实际从Web项目本身注册的两个,而来自外部类的一个从未使它失败。

请记住,这一切在框架2.0和3.0中都可以正常工作,而在3.5中则不能。

最佳答案

两件事情

1-您对通话的论点可能应该类似于以下内容

ScriptManager.RegisterStartupScript(myPage, myPage.GetType(), "alertscript", "alert('test');", true);


第一个参数是注册脚本块的控件的引用,第二个参数是注册脚本块的控件的类型。

2-您在UpdatePanel中使用它吗?
http://msdn.microsoft.com/en-us/library/bb359558.aspx
仅当正在注册启动脚本块的控件位于要更新的​​UpdatePanel控件内部时,使用此方法注册的启动脚本块才会发送到页面

关于c# - 升级到框架3.5后,RegisterStartupScript不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2723333/

10-10 05:08