首页新闻招聘找找看知识库
  • 回复:6 浏览:3673 2010-04-02 09:54 来自 小绿豆

    aspx页面动态load用户控件,用户控件中包含UpdatePanel,第一次加载的时候没问题,点击btnTest按钮回发后就报下面的错误。

    异常信息:


    捕捉到 System.InvalidOperationException
      Message="A control with ID 'btnTest' could not be found for the trigger in UpdatePanel 'up1'."
      Source="System.Web.Extensions"
      StackTrace:
      在 System.Web.UI.UpdatePanelControlTrigger.FindTargetControl(Boolean searchNamingContainers)
      在 System.Web.UI.AsyncPostBackTrigger.Initialize()
      在 System.Web.UI.UpdatePanelTriggerCollection.Initialize()
      在 System.Web.UI.UpdatePanel.Initialize()
      在 System.Web.UI.PageRequestManager.RegisterUpdatePanel(UpdatePanel updatePanel)
      在 System.Web.UI.ScriptManager.System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel(UpdatePanel updatePanel)
      在 System.Web.UI.UpdatePanel.RegisterPanel()
      在 System.Web.UI.UpdatePanel.OnInit(EventArgs e)
      在 System.Web.UI.Control.InitRecursive(Control namingContainer)
      在 System.Web.UI.Control.InitRecursive(Control namingContainer)
      在 System.Web.UI.Control.AddedControl(Control control, Int32 index)
      在 System.Web.UI.ControlCollection.Add(Control child)
      在 FrmTestTriggers.Page_Load(Object sender, EventArgs e)

    代码 母页面

    <body>
      <form id="form1" runat="server">
      <asp:ScriptManager ID="ScriptManager1" runat="server">
      </asp:ScriptManager>
      <asp:Label ID="lblContain" runat="server"></asp:Label>
     </form>
    </body>
    </html>

    cs 文件

      protected void Page_Load(object sender, EventArgs e)
      {  

      WucTestTriggers wc = this.LoadControl("WucTestTriggers.ascx") as WucTestTriggers;
      wc.ID = "idTest";
      this.lblContain.Controls.Add(wc);
      }

    子用户控件

    <asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
      <ContentTemplate>
      <asp:DataGrid ID="dgList" runat="server" AutoGenerateColumns="true">
      </asp:DataGrid>
      <asp:TextBox ID="txtTest" runat=server Text="bu"></asp:TextBox>
       
      </ContentTemplate>
      <Triggers>
      <asp:AsyncPostBackTrigger ControlID="btnTest" EventName="Click"></asp:AsyncPostBackTrigger>
      </Triggers>
      </asp:UpdatePanel>
      <asp:Button ID="btnTest" runat="server" Text="触发" OnClick="btnTest_Click" /> 


    上面的红色部分放到<ContentTemplate>里面就报错了啊。<asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
    <ContentTemplate>
    <asp:DataGrid ID="dgList" runat="server" AutoGenerateColumns="true">
    </asp:DataGrid>
    <asp:TextBox ID="txtTest" runat=server Text="bu"></asp:TextBox>
    <asp:Button ID="btnTest" runat="server" Text="触发" OnClick="btnTest_Click" />
    </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnTest" EventName="Click"></asp:AsyncPostBackTrigger>
    </Triggers>
    </asp:UpdatePanel> 
    感觉像是生命周期的影响,我是不想让UpdatePanel里面的控件都触发异步回发(程序中包含了太多的控件),设置了ChildrenAsTriggers="False",用trigger去触发,现在奇怪的是我吧trigger控件放在UpdatePanel外面是没有问题的,放到<ContentTemplate>里面就报错了,想知道根源啊。

  • 小绿豆
    2010-04-02 13:52 小绿豆
    没有人可以回答吗?
    第1楼 回到顶楼
  • あおぞら
    2010-04-10 23:01 あおぞら
    感觉你还是把其他元件的postback关了吧
    第2楼 回到顶楼
  • 王攀
    2010-06-16 05:56 王攀
    UpdatePanel控件又叫做更新面板,只要把需要数据更新的控件和触发数据更新的控件都放到updatepanel中就可以快速地实现ajax效果了。

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:Label ID="lblContain" runat="server" Text="BBBBBBBb"></asp:Label>
    <asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
    <ContentTemplate>
    <asp:DataGrid ID="dgList" runat="server" AutoGenerateColumns="true">
    </asp:DataGrid>
    <asp:TextBox ID="txtTest" runat="server" Text="bu"></asp:TextBox>
    <asp:Button ID="btnTest" runat="server" Text="触发" OnClick="btnTest_Click" />
    </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnTest" EventName="Click"></asp:AsyncPostBackTrigger>
    </Triggers>
    </asp:UpdatePanel>
    第3楼 回到顶楼
  • NewSea.
    2010-06-16 09:25 NewSea.
    建议放弃 UpdatePanel . 用 JQuery 实现Ajax.
    第4楼 回到顶楼
  • nyth
    2011-08-09 09:44 nyth
    @NewSea.
    要执行一个事件,就比如按钮的事件,你Jquery怎么实现!
    第5楼 回到顶楼
  • xinshenghu
    2012-02-08 15:34 xinshenghu
    那么多ajax技术 其实干的都是一件事 真是坑爹
    第6楼 回到顶楼
登录后才能评论,请先登录注册