我尝试了ScriptManager.GetCurrent,如果返回null,则创建我自己的ScriptManager并将其插入到Form中,但是我在UserControl的生命周期中找不到足够的位置来运行此代码。我不断收到错误消息:“ ID为'uPnlContentList'的控件在页面上需要一个ScriptManager。该ScriptManager必须出现在需要它的任何控件之前。”每次我尝试加载页面时。我尝试运行代码的位置是OnInit,CreateChildControls和PageLoad,它们从未被调用,因为它们在到达它们之前就死了。
我应该在哪里放置此检查?
#1 楼
我讨厌从另一个方向来解决这个问题,但是您正在使用母版页吗?如果是这样,您是否考虑过在其上放置一个ScriptManager并完成它?#2 楼
将ScriptManager放入所有ASPX文件都引用的MasterPage中。然后,在需要使用ScriptManager的站点中的其他任何地方,请使用ScriptManagerProxy,它将从母版页获取ScriptManager,并允许您在用户控件和后面的代码中使用它。现在调用ScriptManager.GetCurrent(Page)将为您提供脚本管理器的引用。
<asp:ScriptManagerProxy>
<Scripts>
<asp:ScriptReference Path="~/Scripts/myscript.js" />
<Scripts>
</asp:ScriptManagerProxy>
这里是一个链接:
MSDN Info
评论
抱歉,我没有主页。这是一个现有的系统,我们不允许浏览和更改所有现有的页面...这就是为什么我试图将smarts放在usercontrol中。
– cjserio
09年3月16日在17:30
〜/ Scripts / myscript.js包含什么?
–光
2011年10月11日15:37
#3 楼
我认为Init事件应该有效。使用您描述的技术(即在添加之前检查ScriptManager.GetCurrent是否返回null),但是在添加ScriptManager时,请确保将其添加为表单中的第一个控件。我还没有测试这,但我认为它将起作用。
评论
抱歉,正如我所说,Init事件甚至没有被击中,因为较早抛出了异常...
– cjserio
09年3月16日在17:29
#4 楼
对我有用的是在#5 楼
我做了两件事。在UserControl上使此Sub:
Public Sub SetFocus()
txtBox.Focus()
End Sub
在校准站点上,请在您的ScriptManagerCall之前调用它
userControl.SetFocus()
如果在UserControl上启用了AutoPostback,则还必须在TextChanged事件中设置焦点。
Protected Sub txtBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged
txtBox.Focus()
......
End Sub
希望这项工作有效。
评论
不,没有主页。...不要让我开始:)我的双手被那个决定所束缚。
– cjserio
09年3月16日在15:39
为什么这是答案?
–peroija
2014年10月3日,12:36