升级到框架3.5后,RegisterStartupScript无法正常工作

时间:2010-04-27 17:08:27

标签: 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. 从我的网站项目类
  4. 注册了另一个警报脚本

    完成所有这些后,如果我从Web项目中查看变量:myPage.ClientScript._registeredClientStartupScripts,我会看到这三个新条目,每个条目对应我刚注册的每个脚本。所以,我相信一切都已正确添加。

    然而,当我让页面完成执行并且我在fiddler中查看结果时,我只看到实际从web项目本身注册的两个,而外部类中的那个从未使它失效。

    请记住,这一切在框架2.0和3.0中完全正常,而不是3.5。

2 个答案:

答案 0 :(得分:1)

两件事

1-你的电话参数应该类似于以下内容

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

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

2-您是否在UpdatePanel中使用此功能?
http://msdn.microsoft.com/en-us/library/bb359558.aspx

仅当正在注册块的控件位于正在更新的UpdatePanel控件

时,才会将使用此方法注册的启动脚本块发送到页面 >

答案 1 :(得分:1)

问题在于外部项目。

如果更改Web项目以使用Framework 3.5,则System.Web.Extensions dll引用会自动更新为3.5版本。

非网络项目不是这种情况,可能是因为它们是手动添加的。

外部项目仍在引用dll的2.0版本,即使我将项目更改为使用3.5进行编译。

手动更改3.5版本的引用后,一切正常。