我正在尝试将 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 是否无法正确注册?
-Edit2-
为了添加更多内容,我做了以下操作:
- 从我的网络项目类中注册了一个警报脚本
- 调用了外部类中的方法,简单地注册了另一个警报脚本
- 从我的网络项目类中注册了另一个警报脚本
完成所有这些之后,如果我查看变量:来自 Web 项目的 myPage.ClientScript._registeredClientStartupScripts,我会看到这三个新条目,每个条目对应我刚刚注册的每个脚本。所以,我相信一切都已正确添加。
但是,当我让页面完成执行并在 fiddler 中查看结果时,我只看到实际从 web 项目本身注册的两个,而来自外部类的一个永远不会下来。
请记住,这一切在框架 2.0 和 3.0 中都可以正常工作,但在 3.5 中不行。
最佳答案
两件事
1- 您对调用的论点可能如下所示
ScriptManager.RegisterStartupScript(myPage, myPage.GetType(), "alertscript", "alert('test');", true);
第一个参数是对注册脚本 block 的控件的引用,第二个是注册脚本 block 的控件的类型。
2- 您是否在 UpdatePanel 中使用它?
http://msdn.microsoft.com/en-us/library/bb359558.aspx
只有当注册该 block 的控件位于正在更新的 UpdatePanel 控件内时,才会将使用此方法注册的启动脚本 block 发送到页面
关于c# - 升级到框架 3.5 后 RegisterStartupScript 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2723333/