c# - 升级到框架 3.5 后 RegisterStartupScript 不工作

标签 c# asp.net .net-3.5 asp.net-3.5

我正在尝试将 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-

为了添加更多内容,我做了以下操作:

  1. 从我的网络项目类中注册了一个警报脚本
  2. 调用了外部类中的方法,简单地注册了另一个警报脚本
  3. 从我的网络项目类中注册了另一个警报脚本

完成所有这些之后,如果我查看变量:来自 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/

相关文章:

c# - asp.net 如何将值从服务器端页面传递到客户端函数

c# - 派生的RequiredAttribute不起作用

C# 编译器无法识别正在实现接口(interface)的类

c# - 从 C# 中的脚本语言获取表达式树

c# - C# 中的 IPC 机制 - 使用和最佳实践

asp.net - 通过添加哈希来防止查询字符串操作?

c# - 从 visual studio 和 SQL 中的数据列表中获取选定的产品

c# - 是否有可能获得封闭内存流的长度?

c# - 从 XPath 中检索与同一节点中的另一个属性值相匹配的属性值

asp.net - 在 Visual Studio 2010 中使用 ASP.NET MVC2 Web 应用程序以 .NET3.5 为目标?