[英]Read custom user control state
我添加了一个自定义用户控件到我的页面,文本框和radioboxes,但每次回发后,内容被删除,我不知道如何读取其中输入的值。
根据我的经验,您必须在每次刷新时添加用户控件,但这不会恢复其状态。 我希望将值存储在ViewState中,但由于某种原因不会发生这种情况。
注意:我需要在一个页面上添加多个用户控件,因此我需要通过ID或从我的页面中选择该用户控件的linq表达式来标识每个用户控件。
我用C#4.0编程
我如何添加我的用户控件:
private void AddInstrumentDetailToPage()
{
RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx");
InstrumentDetail.Controls.Add(lItem);
}
我保存了ViewState中的控件数量,并调用了AddInstrumentDetail()那么多次,但它们看起来都是空的。 我已经读过某个地方,我必须在Page_Init中添加它,因为视图状态尚未初始化,但这也无济于事。
您需要最近在Page_Load
重新创建动态添加的(用户)控件以维护ViewState。 因此,您应该将已添加的控件的数量存储在ViewState-Property中,并根据它在Page_Load
中重新加载它们。 您必须在AddInstrumentDetailToPage
将此变量与1 AddInstrumentDetailToPage
。
如果在Viewstate变量中存储已添加控件的数量,则无法在Page的Init-Event中重新创建控件,因为ViewState-Variable尚未在那里重新加载。
除非您进行PostBack
否则您将没有任何ControlState
。 刷新浏览器/请求相同的链接将是一个全新的开始。
默认情况下,添加到页面的任何control
都是存储在UserControl
ViewState
和ControlState
中的数据。
如果您愿意保存您的内容,我建议您将其保存在Request.Session.Add("yourKey", "yourValue")
。
您可以使用var yourValue = Request.Session["yourKey"];
访问您的会话var yourValue = Request.Session["yourKey"];
在protected void Page_Load(object sender, EventArgs e)
方法上。
指定RMAItem
实例的ID,否则在ControlState
上存储数据可能不起作用!
private void AddInstrumentDetailToPage()
{
RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx");
lItem.ID = "rmaItem1"; //<-- This is important
InstrumentDetail.Controls.Add(lItem);
}
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.