【问题标题】:AJAX ScriptManager in UserControlUserControl 中的 AJAX ScriptManager
【发布时间】:2009-03-16 15:34:43
【问题描述】:

我有一个包含 UpdatePanel 的 UserControl,其中包含一些其他控件。 UserControl 将用于一些已经有 ScriptManager 的页面和其他没有 ScriptManager 的页面。如果不存在,我希望 UserControl 自动带上自己的 ScriptManager。

我已经尝试过 ScriptManager.GetCurrent,如果它返回 null,我将创建自己的 ScriptManager 并将其插入到表单中,但我无法在 UserControl 的生命周期中找到足够早的位置来运行此代码。我不断收到错误消息“ID 为 'uPnlContentList' 的控件需要页面上的 ScriptManager。ScriptManager 必须出现在任何需要它的控件之前。”每次我尝试加载页面。我尝试运行我的代码的地方是 OnInit、CreateChildControls 和 PageLoad,它们永远不会被调用,因为它在到达它们之前就死了。

我应该把这张支票放在哪里?

【问题讨论】:

    标签: c# ajax user-controls scriptmanager


    【解决方案1】:

    在所有 ASPX 文件引用的 MasterPage 中放置一个 ScriptManager。然后,您需要在站点中使用 ScriptManager 的任何其他地方使用 ScriptManagerProxy,它将从母版页获取 ScriptManager,并让您在用户控件和后面的代码中使用它。

    现在调用 ScriptManager.GetCurrent(Page) 将为您提供对脚本管理器的引用。

    <asp:ScriptManagerProxy>
      <Scripts>
        <asp:ScriptReference Path="~/Scripts/myscript.js" />
      <Scripts>
    </asp:ScriptManagerProxy>
    

    这是一个链接:

    MSDN Info

    【讨论】:

    • 对不起,我没有母版页。这是一个现有的系统,我们不允许浏览和更改所有现有页面......这就是为什么我试图将智能放在用户控件中。
    • ~/Scripts/myscript.js 包含什么?
    【解决方案2】:

    我不想从另一个方向开始,但是您使用的是母版页吗?如果是这样,您是否考虑过在其上放置一个 ScriptManager 并完成它?

    【讨论】:

    • 不,没有母版页......不要让我开始 :) 我的双手被束缚在那个决定上。
    • 为什么是这个答案?
    【解决方案3】:

    我认为 Init 事件应该可以工作。使用您描述的技术(即在添加之前检查 ScriptManager.GetCurrent 是否返回 null)但是当您添加 ScriptManager 时,请确保将其添加为表单中的第一个控件。

    我尚未对此进行测试,但我认为它会起作用。

    【讨论】:

    • 对不起,正如我所说,初始化事件甚至没有被命中,因为之前抛出了异常......
    【解决方案4】:

    对我有用的是在

    之后包含这一行
     <asp:ScriptManager ID="scriptManager" runat="server"/>
    

    这让我明白了“...页面上需要一个 ScriptManager。ScriptManager 必须出现在任何需要它的控件之前。”

    【讨论】:

      【解决方案5】:

      我做了两件有用的东西。

      在 UserControl 上创建这个 Sub:

      Public Sub SetFocus()
          txtBox.Focus()
      End Sub
      

      在 caling 站点上,在 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
      

      希望这行得通。

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 1970-01-01
        • 2012-09-17
        • 2011-05-25
        • 2011-04-20
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多