2011-12-12 17 views
3

我有,我有在面板內部預留一個aspx頁面回傳的所有其他領域成爲空

<div> 
    <div> 
     <div> 
      <div> 
       <div> 
        <div> 
         <asp:UpdatePanel runat="server" ID="UpdatePanelLinks"> 
          <ContentTemplate> 
           <center> 
            <asp:Button Text="ADD" ID="btnAdd" runat="server" Width="100" OnClick="btnAdd_Click" />&nbsp; 
            <asp:Button Text="Edit" ID="btnEdit" runat="server" Width="100" OnClick="btnEdit_Click" />&nbsp; 
            <asp:Button Text="Delete" ID="btnDelete" runat="server" Width="100" OnClick="btnDelete_Click" /></center> 
           <asp:LinkButton ID="usercontroldata" runat="server" Text="Branches" 
            OnClick="usercontrol_Click"></asp:LinkButton> 
          </ContentTemplate> 
         </asp:UpdatePanel> 
        </div> 
       </div> 
       <div > 
        <asp:LinkButton ID="lnkDepartments" runat="server" Text="Departments" OnClick="lnkDepartments_Click"></asp:LinkButton> 
       </div> 
       <div > 
       </div> 
       <div > 
        <asp:LinkButton ID="lnkProjects" runat="server" Text="Projects" OnClick="lnkProjects_Click"></asp:LinkButton> 
       </div> 
       <div > 
       </div> 
       <div > 
        &nbsp; 
       </div>      
      </div> 
      <div> 
       <div> 
        <asp:Label Text="" Visible="false" ID="lblmessage" runat="server" /> 
        <div> 
         <asp:UpdatePanel ID="UpdatePanel" runat="server"> 
          <Triggers> 
           <asp:AsyncPostBackTrigger ControlID="lnkBranches" EventName="Click" /> 
           <asp:AsyncPostBackTrigger ControlID="lnkDepartments" /> 
           <asp:AsyncPostBackTrigger ControlID="lnkProjects" /> 
           <asp:AsyncPostBackTrigger ControlID="btnAdd" /> 
           <asp:AsyncPostBackTrigger ControlID="btnEdit" /> 
           <asp:AsyncPostBackTrigger ControlID="btnDelete" /> 
          </Triggers> 
          <ContentTemplate> 
           <asp:Panel runat="server" ID="MainPanel"> 
            <div class="padding_branch"> 
             <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
            </div> 
           </asp:Panel> 
          </ContentTemplate> 
         </asp:UpdatePanel> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
<asp:UpdatePanel ID="UpdatePanel" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="lnkBranches" EventName="Click" /> 
     <asp:AsyncPostBackTrigger ControlID="lnkDepartments" /> 
     <asp:AsyncPostBackTrigger ControlID="lnkProjects" /> 
     <asp:AsyncPostBackTrigger ControlID="btnAdd" /> 
     <asp:AsyncPostBackTrigger ControlID="btnEdit" /> 
     <asp:AsyncPostBackTrigger ControlID="btnDelete" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:Panel runat="server" ID="MainPanel"> 
      <div > 
       <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>          
      </div> 
     </asp:Panel> 
    </ContentTemplate> 
</asp:UpdatePanel>  

和aspx.cs頁面我是上動態添加的鏈接

,並添加按鈕點擊新用戶控件加載

protected void usercontrol_Click(object sender, EventArgs e) 
{ 
     if (ViewState["controlname"] != null) 
     { 
      PlaceHolder pl = MainPanel.FindControl(ViewState["controlname"].ToString()) as PlaceHolder; 
      if (pl.Controls.Count > 0) 
      { 
       pl.Controls.RemoveAt(0); 
      } 
     } 

     Control uc = (Control)Page.LoadControl("~/usercontrol_Data.ascx"); 

     ViewState["path"] = "~/usercontrol_Data.ascx"; 
     ViewState["controlname"] = "PlaceHolder1"; 
     ViewState["name"] = "usercontrol"; 
     PlaceHolder1.Controls.Add(uc); 
} 
單擊Web用戶控件

我也mainaining上的Page_Load

 if (Page.IsPostBack) 
     { 
      if (ViewState["path"] != null) 
      { 
       Control uc1 = (Control)Page.LoadControl(ViewState["path"].ToString()); 

       PlaceHolder pl = MainPanel.FindControl(ViewState["controlname"].ToString()) as PlaceHolder; 
       pl.Controls.Add(uc1); 
      } 
     } 

web用戶控制並且對當IAM從用戶控制它回來後選擇任何選項和其他所有領域成爲空形式的用戶控制下拉列表爲文本框等。這happans首次和下一次的所有字段保留有值

請幫助

感謝

+1

對於未來的崗位,可以考慮留下不必要的代碼了你帖子摘錄的。第一個樣本中的所有div都很難看到發生了什麼,並且對功能沒有影響。 **這只是一個建議。** – jadarnel27

+0

感謝您的建議,我會記住 –

回答

1

我有每一個分配相同ID的控制做到了這一點動態加載控件的時間。這是因爲當控件每次動態添加新控件時,它會爲我創建問題

uc1.ID =「Web_User_Control_ID」;每次

控制負荷ASIGN此ID將甲階酚醛樹脂的問題

0

嘗試在Page_Load事件改變Page.IsPostBack!Page.IsPostback

0

動態添加的控件是而不是在發佈後支持;您必須在上重新添加動態添加的控件,每個控件都要回發。在每個頁面請求中,asp.net將解析你的aspx文件,構建頁面的html結構,然後通過ViewState填充任何以前填充的值併發布值,然後提供。而已。它永遠不會自動重新添加動態添加的內容。

所以一旦你運行該代碼

protected void usercontrol_Click(object sender, EventArgs e) 
{ 
    //... 
    Control uc = (Control)Page.LoadControl("~/usercontrol_Data.ascx"); 

    ViewState["path"] = "~/usercontrol_Data.ascx"; 
    ViewState["controlname"] = "PlaceHolder1"; 
    ViewState["name"] = "usercontrol"; 
    PlaceHolder1.Controls.Add(uc); 
} 

你需要以某種方式知道要重新運行它每次用戶回發

+0

問題我該如何重新運行此代碼,我在頁​​面加載時保持狀態,就像我的問題一樣。任何建議? –

+0

將上面的代碼重構爲新方法;說LoadMyControl並在usercontrol_click和Page_Load事件中調用它。 –

+1

@GurbaxSinghBhangal - Kev是對的。您需要將此控制添加代碼放在一個地方,並在需要時重新調用頁面加載 –