簡體   English   中英

如何從動態添加的用戶控件訪問值?

[英]How to access values from dynamically added user control?

我想從動態添加的用戶控件中獲取值

我正在嘗試,但計數為0,所以條件失敗

碼:

private const string VIEWSTATEKEY = "ContactCount";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            //Set the number of default controls
            ViewState[VIEWSTATEKEY] = ViewState[VIEWSTATEKEY] == null ? 1 : ViewState[VIEWSTATEKEY];

            //Load the contact control based on Vewstate key
            LoadContactControls();
        }
    }


 private void LoadContactControls()
 {
    for (int i = 0; i < int.Parse(ViewState[VIEWSTATEKEY].ToString()); i++)
    {
        rpt1.Controls.Add(LoadControl("AddVisaControl.ascx"));
    }
 }

 protected void addnewtext_Click(object sender, EventArgs e)
 {
     ViewState[VIEWSTATEKEY] = int.Parse(ViewState[VIEWSTATEKEY].ToString()) + 1;
     LoadContactControls();
 }

編輯

這是問題計數為0,因此條件失敗的循環出現了

private void saveData()
{
    foreach (var control in rpt1.Controls)
        {
            var usercontrol = control as VisaUserControl;

            string visaNumber = usercontrol.TextVisaNumber;
            string countryName = usercontrol.VisaCountry;
        }
    }
}

protected void Save_Click(object sender, EventArgs e)
{
    saveData();
}

.ascx.cs

    public string TextVisaNumber
    {
        get { return txtUser.Text; }
        set { txtUser.Text = value; }
    }

    public string VisaCountry
    {
        get { return dropCountry.SelectedValue; }
        set { dropCountry.SelectedValue = value; }
    }

.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AddVisaControl.ascx.cs" EnableViewState="false" Inherits="Pyramid.AddVisaControl" %>
<%@ Register assembly="BasicFrame.WebControls.BasicDatePicker" namespace="BasicFrame.WebControls" tagprefix="BDP" %>
<div id="divreg" runat="server">
<table id="tbl" runat="server">
    <tr>
    <td>
        <asp:Label ID="lbl2" runat="server"></asp:Label>
    </td>
</tr>
<tr>
<td> Visa Number:</td>
<td><asp:TextBox ID="txtUser" Width="160px" runat="server"/></td>
<td> Country Name:</td>
<td><asp:DropDownList ID="dropCountry" Width="165px" runat="server"></asp:DropDownList></td>
</tr>
<tr>
<td> Type of Visa:</td>
<td><asp:DropDownList ID="dropVisa" Width="165px" runat="server"></asp:DropDownList></td>
<td> Type of Entry:</td>
<td><asp:DropDownList ID="dropEntry" Width="165px" runat="server"></asp:DropDownList></td>
</tr>
<tr>
<td> Expiry Date</td>
    <td><BDP:BasicDatePicker ID="basicdate" runat="server"></BDP:BasicDatePicker></td>
<td>
<asp:Button ID="btnRemove" Text="Remove" runat="server" OnClick="btnRemove_Click" />
</td>
</tr>
</table>
</div>

有任何想法嗎? 提前致謝

您需要在用戶控件中創建公共屬性 並通過用戶控件的ID訪問該屬性。 看到這個的問題。

始終為要添加控件的控件分配ID,這是一種很好的做法。

Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
ctrl.ID = "UniqueID";

另外,由於要動態添加控件,因此您需要管理控件的視圖狀態,或添加為您執行此操作的第三方控件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM