我正在尝试将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。
答案 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版本的引用后,一切正常。