如何获取动态生成usercontrol's控件的属性值

本文关键字:控件 属性 usercontrol 何获取 获取 动态 | 更新日期: 2023-09-27 17:50:58

这是我的用户控件的代码。

  <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NewUserControl.ascx.cs"           
  Inherits="usercontrol.NewUserControl" %>
  <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
  <asp:LinkButton ID="LinkButton1" runat="server"  onclick="LinkButton1_Click">LinkButton1</asp:LinkButton>  

,在按钮单击事件的另一个表单上,我正在加载用户控件。像这样——

    protected void LoadControl_Click(object sender, EventArgs e)
    {
        newuc = LoadControl("NewUserControl.ascx") as NewUserControl;          
        form1.Controls.Add(newuc);
        Session["chksession"] = ((int)Session["chksession"]) + 1;
        if (((int)Session["chksession"]) >= 1)
        {
            for (int i = 1; i < ((int)Session["chksession"]); i++)
            {
                newuc = LoadControl("NewUserControl.ascx") as NewUserControl;
                form1.Controls.Add(newuc);
            }
        }
    }

现在用户控件可以加载任何没有的时间,现在我需要的所有文本框的文本上存在的窗体上的一个按钮的点击是存在于.aspx页面上。我是新来的……需要指导。

如何获取动态生成usercontrol's控件的属性值

为什么不给你的UserControl添加一个属性,允许你在TextBox1:

中获取/设置文本呢?
public string Text {
    get { return TextBox1.Text; }
    set { TextBox1.Text = value; }
}

在您的按钮处理程序中像这样访问它:

newuc.Text = "Setting the text";
string myString = newuc.Text; //getting the text

更新:

因为你是动态加载UserControls,你必须在一个StateBag (ViewState, Session等)中持久化它们的值。

public string Text {
    get {
        //Default to any existing text
        string s = TextBox1.Text;
        //Use TextBox1.UniqueID to ensure a unique string for the ViewState key
        if (TextBox1.Text.Length == 0 & ViewState(TextBox1.UniqueID) != null) {
            //TextBox1.Text is empty, restore from ViewState
            s = ViewState(TextBox1.UniqueID).ToString;
        }
        return s;
    }
    set {
        //Set TextBox1.Text
        TextBox1.Text = value;
        //Store in ViewState as well
        ViewState(TextBox1.UniqueID) = TextBox1.Text;
    }
}