如何在回发期间保存自定义用户控件viewstate?

时间:2011-10-24 20:59:52

标签: c# asp.net viewstate

我编写了用户控件InputDetails,里面有几个文本框和几个单选框。

我在Page_Load:

期间动态添加它
if(!Page.IsPostBack()){
  InputDetails input = (InputDetails)Page.LoadControl("InputDetails.ascx");
  PlaceHolder1.Controls.Add(input);
}

但是当我刷新页面时,控件就消失了,所以我问,如何在视图状态中保存用户控件已经添加它,所以下次自动重新加载它。更好的是,当页面回发时,如何读取用户控件文本框中的值?我需要能够在一个页面上添加多个InputDetails,因此保存它会很有用。

2 个答案:

答案 0 :(得分:2)

如果动态地向页面添加控件,则必须在每次回发后重新创建它。 尝试删除 if(Page.IsPostBack())行并检查它是否有效:)。 对于您创建的每个控件,您还应该在每次创建时设置相同的ID值。 如果没有其他问题,ViewState应该能够跨回发保存控件的状态。

为了阅读这些值,你可以:

  • 向您的用户控件添加一些公共属性,以便访问您需要的值 或
  • 使用 TextBox txtBox =(TextBox)myCustomControlObject.FindControl(“nestedTextBox”)方法查找(此处提供更多信息:http://msdn.microsoft.com/en-us/library/486wc64h.aspx

答案 1 :(得分:0)

您也可以使用AJAX动态加载用户控件/服务器控件,viewstate需要控件ID才能正确存储视图状态。

请您浏览more info

的链接