如何从aspx页面中保留ascx控件中的值,请单击按钮

本文关键字:控件 按钮 请单击 ascx 保留 aspx | 更新日期: 2023-09-27 18:27:38

IDE:VS 2012 web

我有一个test.aspx页面,使用以下代码在该页面上动态添加用户控件

 internal static List<ucTest> collTest  = null;
 private void PageLoad()  
 {
      //called in page on load, handled properly across postback.
      collTest   = new List<ucTest>();
 }

    private void AddTestControl()
    {
            ucTest obj= LoadControl("~/UserControl/ucTest.ascx") as ucTest;
            collTest.Add(obj); //control instance is added in list, to retrieve back values.
    }

现在,在test.aspx代码隐藏文件中的按钮Save Click上,我正试图取回ucTest文本框的值。,我已经空了。你能告诉我如何保持这种价值吗。

protected void btnSave_Click(object sender, EventArgs e)
    {
        ucTest test = (ucTest )this.FindControl("ucTest.ascx"); //not working, test is null.  


        foreach (ucTest objTest in collTest)
        {

           string s  = objTest.txtSomthing.value; //here s is showing empty.., even the value is populated in form.; , txtSomthing is public in designer.
        }
    }    

有什么方法可以从ucTest中检索这些值吗。,aspx页面可以包含多个ucTest控件。

如何从aspx页面中保留ascx控件中的值,请单击按钮

假设您的userControl中有一个名为txtName的文本框,那么我将通过在userControl的代码后面添加一个属性来公开它的值。即

public string FirstName
{
   get
   {
      return txtName.Text;
    }
    set
    {
       txtName.Text = value;
    }
}

然后在您的aspx中执行以下操作:

protected void btnSave_Click(object sender, EventArgs e)
{
    ucTest test = (ucTest )collTest[yourdropdown.SelectedIndex];
    string strName = ucTest.FirstName;
}    

使用以下方法解决问题:

string value = Request.From["someDynamicID"];  

当您将控件添加到父页This is Key时,您必须从page_Init()方法进行加载。通过这种方式,它将被添加到网站的视图状态中。例如,如果您将其添加到Page_Load()中,您将无法在Save()方法中获得用户控件的值。

这个链接有一个ZIP文件中的源代码示例。