读取自定义用户控件状态

时间:2011-10-25 08:47:17

标签: asp.net

我在页面中添加了一个自定义用户控件,包含文本框和单片机,但在每次回发后,内容都会被删除,我不知道如何读取其中输入的值。

据我所知,你必须在每次刷新时添加用户控件,但这不会恢复其状态。我希望将值存储在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中添加它,因为视图状态尚未初始化,但这也无济于事。

2 个答案:

答案 0 :(得分:1)

您需要最新在Page_Load重新创建动态添加的(用户)控件以维护ViewState。因此,您应该将已添加的控件的数量存储在ViewState-Property中,并根据它在Page_Load中重新加载它们。您必须在AddInstrumentDetailToPage中将此变量与1相加。

MSDN: Dynamically Adding User Controls

如果在Viewstate变量中存储添加的控件的数量,则无法在Page的Init-Event中重新创建控件,因为ViewState-Variable尚未在那里重新加载。

答案 1 :(得分:1)

除非您制作ControlState,否则您将无法PostBack。刷新浏览器/请求相同的链接只是一个新的开始。

默认情况下,添加到您网页的所有control都是存储在ViewStateControlState UserControl中的数据。

如果您愿意保存内容,我建议您将其保存在Request.Session.Add("yourKey", "yourValue")

您可以使用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);
}

希望它有所帮助!