2010-03-23 62 views
0

我在具有两个下拉列表的母版页中有一个用户控件。当用户从ddl中选择一个项目时,我想在内容页面的更新面板中加载特定的用户控件。我无法弄清楚如何让用户控件触发更新面板。任何建议都非常感谢。我可以从用户控件的下拉列表中触发更新面板

<%@ Register src="toolbar.ascx" tagname="toolbar" tagprefix="uc1" %> 
<head id="Head1" runat="server"> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
     </asp:ToolkitScriptManager> 
    </div> 
    <uc1:toolbar ID="toolbar1" runat="server" /> 
     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
     </asp:ContentPlaceHolder> 
    </form> 
</body> 
</html> 

用户控制

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="toolbar.ascx.cs" Inherits="Blah.toolbar" %> 
<asp:DropDownList ID="ddlDesiredPage" runat="server" AutoPostBack="True" 
      EnableViewState="True" 
      onselectedindexchanged="goToSelectedPage"> 
      <asp:ListItem Value="-">DDL 1</asp:ListItem> 
     </asp:DropDownList> 
     &nbsp; 
<asp:DropDownList ID="ddlDesiredPageSP" runat="server" AutoPostBack="True" 
     EnableViewState="True" 
     onselectedindexchanged="goToSelectedPage"> 
      <asp:ListItem Value="-">DDL 2</asp:ListItem> 
</asp:DropDownList> 

内容页

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" onload="UpdatePanel1_Load"> 
     <ContentTemplate> 
      <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
     </ContentTemplate> 
     <Triggers> 
     ????????????????????????????????? 
     </Triggers> 
    </asp:UpdatePanel> 
</asp:Content> 
+0

这将取决于你告诉它使用孩子作为触发器(这是默认情况下)或没有。如何张贴一些代码,以便我们可以更好地帮助你。 – Middletone 2010-03-23 20:46:34

+0

好的,我添加了一些我希望能够帮助表达场景的基本代码。 – MisterIsaak 2010-03-23 21:12:55

回答

2

如果要更新窗格l通过您创建的用户控件,您可以尝试设置UpdatePanel的UpdateMode = Conditional。然后,在你的用户控件的Click事件(或任何事件),有这样的事情:

UpdatePanel mUpdatePanel = this.Page.Master.FindControl("upContent") as UpdatePanel; 
    if (mUpdatePanel != null) 
    { 
     mUpdatePanel.Update(); 
    } 
    else 
    { 
     //update panel not found 
    } 

UPDATE

因为你不能在声明访问您的触发器,您就可以将其添加到代码-背后。在您的内容页面上添加如下内容:

AsyncPostBackTrigger triggerUserControl = new AsyncPostBackTrigger(); 
         DropDownList ucDDL = this.Page.Master.FindControl("ddlDesiredPage") as DropDownList; 
         triggerUserControl.ControlID = ucDDL.ID; 
         triggerUserControl.EventName = "Click"; 

         UpdatePanel1.Triggers.Add(triggerUserControl); 

对另一个DropDownList执行相同操作。我没有尝试过,但看起来很合理。

+0

好吧,我看到你在做什么,我认为它接近我所需要的。但布局切换。我的用户控件位于母版页上,而我的更新面板位于Web内容页面中。 – MisterIsaak 2010-03-23 20:27:03

+0

在这种情况下,在您的MasterPage代码隐藏中(对于用户控件事件),您可以尝试: 'UpdatePanel mUpdatePanel = ContentPlaceHolder1.FindControl(“upContent”)作为UpdatePanel' – keyboardP 2010-03-23 20:53:55

+0

我已根据您的代码更新了我的答案。 – keyboardP 2010-03-23 22:58:54

1

尝试添加回发触发您的UpdatePanel:

<Triggers> 
    <asp:PostBackTrigger ControlID="ddl..." /> 
</Triggers> 
+0

对,但是如何在我的母版页上找到用户控件中的ddl? – MisterIsaak 2010-03-23 20:29:34

相关问题