2010-03-23 49 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

相關問題