2013-01-08 54 views
0

我有一個標籤和一個文本框,我已經添加到用戶控件中。在Button上動態加載用戶控件點擊

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddMultiLoc.ascx.cs" Inherits="CRM_Streamline_Forms.UserControls.AddMultiLoc" %> 
<table> 
<tr> 
    <td style="width:25%"> 
     <asp:Label ID="lblLocName_UC_G0138" runat="server" Text="Location Name:" /> 
    </td> 
    <td style="width:25%"> 
     <asp:TextBox ID="txtLocName_UC_G0138" runat="server" Width="200px" /> 
    </td> 
    <td style="width:25%"> 
     <asp:Label ID="lblLocID_UC_G0138" runat="server" Text="Location ID:" /> 
    </td> 
    <td style="width:25%"> 
     <asp:TextBox ID="txtLocID_UC_G0138" runat="server" Width="200px" /> 
    </td> 
</tr> 

我在我的aspx頁面是點擊要填充這個用戶控件,當一個鏈接按鈕。

<asp:LinkButton ID="lnkAddLoc_AGBI2_G0138" runat="server" Text="+ Add Another Location" onclick="lnkAddLoc_AGBI2_G0138_Click" /> 

後面的代碼,我已經寫了按鈕,點擊此代碼:

protected void lnkAddLoc_AGBI2_G0138_Click(object sender, EventArgs e) 
    { 
     AddMultiLoc con = (AddMultiLoc)LoadControl("~/UserControls/AddMultiLoc.ascx"); 
     pnlMultiInvoiceInfo1_AGBI2_G0138.Controls.Add(con); 
     Panel p = new Panel(); 
     Control uc = (Control)Page.LoadControl("~/UserControls/AddMultiLoc.ascx"); 
        p.Controls.Add(uc); 
        p.Width = 200; 
        p.Height = 100; 
        pnlMultiInvoiceInfo1_AGBI2_G0138.Controls.Add(p); 
    } 

第一次爲我在aspx頁面調用它的用戶控件被填充,但是當我點擊第二次鏈接按鈕,它不是第二次填充用戶控件。是新的編碼,請幫助:(

+0

我在下面提供了一個工作示例。這事有進一步更新嗎? – Seany84

+0

我回復了你的答案很抱歉...我不能使用會話,因爲這些頁面將託管在CRM和CRM是無狀態的......我被告知不要使用會話對象:( – user1742152

+0

謝謝你真的應該發佈信息最初 – Seany84

回答

0

我認爲這個問題是,你是跨回傳失去你的控件的控件到ViewState中加載。

這裏有一個例子,你可以加載控件在到是不是真的很好的做法,但它會爲你的目的的工作會議:

AddMultiLocPage.aspx

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:LinkButton ID="lnkAddLoc_AGBI2_G0138" runat="server" Text="+ Add Another Location" OnClick="lnkAddLoc_AGBI2_G0138_Click" /> 
     </div> 
     <asp:PlaceHolder runat="server" ID="Placeholder1"></asp:PlaceHolder> 
    </form> 
</body> 
</html> 

AddMultiLocPage.a spx.cs

public partial class AddMultiLocPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     LoadControlsFromSession(); 
    } 

    private List<AddMultiLoc> ViewStateControls 
    { 
     get { return (List<AddMultiLoc>) Session["ViewStateControls"]; } 
     set { Session["ViewStateControls"] = (List<AddMultiLoc>)value; } 
    } 

    private void LoadControlsFromSession() 
    { 
     if (ViewStateControls != null) 
     { 
      Placeholder1.Controls.Clear(); 

      foreach (var c in ViewStateControls) 
      { 
       Placeholder1.Controls.Add(c); 
      } 
     } 
    } 

    protected void lnkAddLoc_AGBI2_G0138_Click(object sender, EventArgs e) 
    { 
     var con = (AddMultiLoc)LoadControl("~/AddMultiLoc.ascx"); 
     con.ID = Guid.NewGuid().ToString(); 

     List<AddMultiLoc> tmpList = ViewStateControls; 
     if(tmpList == null) tmpList = new List<AddMultiLoc>(); 
     tmpList.Add(con); 
     ViewStateControls = tmpList; 

     LoadControlsFromSession(); 
    } 
} 

用戶控件標記

<table> 
    <tr> 
     <td style="width: 25%"> 
      <asp:Label ID="lblLocName_UC_G0138" runat="server" Text="Location Name:" /> 
     </td> 
     <td style="width: 25%"> 
      <asp:TextBox ID="txtLocName_UC_G0138" runat="server" Width="200px" /> 
     </td> 
     <td style="width: 25%"> 
      <asp:Label ID="lblLocID_UC_G0138" runat="server" Text="Location ID:" /> 
     </td> 
     <td style="width: 25%"> 
      <asp:TextBox ID="txtLocID_UC_G0138" runat="server" Width="200px" /> 
     </td> 
    </tr> 
</table> 
+0

我的問題是我無法使用會話,因爲這些頁面將託管在CRM中和CRM是無國界的...請解釋... – user1742152

+0

@ user1742152該信息應該已經在您的原始文章中! – Seany84

+0

我很抱歉,我有一個工作,我很快發佈。 – user1742152

-2

無需存儲控制會議,解決你的問題是:

ASPX代碼:

< asp:LinkButton ID="lnkAddLoc_AGBI2_G0138" runat="server" Text="+ Add Another Location" onclick="lnkAddLoc_AGBI2_G0138_Click" /> 
    <asp:Panel ID="Panel1" runat="server"> 

代碼隱藏:

protected void lnkAddLoc_AGBI2_G0138_Click(object sender, EventArgs e) 
    { 
     Control uc = (Control)Page.LoadControl("~/AddMultiLoc.ascx"); 
     Panel1.Controls.Add(uc); 
    } 

無論何時點擊鏈接按鈕lnkAddLoc_AGBI2_G0138,它都會將新用戶控件實例添加到Panel1。

+0

鑑於你的代碼和他的組合,這對我不起作用。你測試過了嗎?你能舉一個完整的實例嗎? – Seany84

+0

這是一個完美的工作示例。在我的代碼中,用戶控件是在應用程序的根目錄中創建的。您需要在LoadControl(「〜/ AddMultiLoc.ascx」)調用中更改用戶控件的路徑,並且不要將我的發佈代碼與任何其他必須工作的代碼合併在一起,因爲在此處可以正常工作。 –

+0

好的。然後發佈你的所有代碼。即您的Web表單,代碼隱藏和用戶控制以及代碼隱藏,讓我們看看這個工作示例。 – Seany84

相關問題