2011-10-25 82 views
0

我添加了一个自定义用户控件到我的网页,用文本框和选项框,但每次回发后,除去内容物,我不知道如何读它中输入的值。读自定义用户控件状态

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

+0

你如何添加你的用户控件?将它添加到aspx代码中是否可行? –

回答

1

您需要重新在Page_Load最新动态添加(用户)控制来维持的ViewState。因此,您应该将已添加的控件的数量存储在ViewState-Property中,并根据它们在Page_Load中重新加载它们。你必须在AddInstrumentDetailToPage中用1来总结这个变量。

MSDN: Dynamically Adding User Controls

如果存储在视图状态变量添加控件的数量,你不能因为ViewState的变量将尚未被重新加载重新出现在页面的初始化,事件控制。

+0

我保存了ViewState中的控件量,并调用AddInstrumentDetail()这个次数,但它们看起来是空的。我读过一些地方,我必须将它添加到Page_Init中,因为视图状态尚未初始化,但这也无济于事。 – NomenNescio

+0

啊!我理解,我必须在Page_Init中添加控件,但我怎么知道我需要添加多少?我可以将它保存在查询字符串中吗? – NomenNescio

+0

在Page_Load中可能就足够了(使用ViewState变量来存储添加的控件的数量的优势)。看看下面的文章,看看它是否足够:http://msdn.microsoft.com/en-us/library/ms972976.aspx#viewstate_topic4或另一个类似的问题上我:http://stackoverflow.com/questions/5046101 /动态创建控件正在被按下按钮/ 5046162#5046162 –

1

你不会有任何ControlState除非你犯了一个PostBack。刷新浏览器/请求相同的链接将只是一个全新的开始。

默认情况下,您的页面中添加的任何control都是ViewStateControlState中为UserControl存储的数据。

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

您可以在protected void Page_Load(object sender, EventArgs e)方法访问与var yourValue = Request.Session["yourKey"];会话。

指定您的RMAItem实例的ID,否则在ControlState上存储数据可能无效!

private void AddInstrumentDetailToPage() 
{ 
    RMAItem lItem = (RMAItem)Page.LoadControl("/Controls/RMAItem.ascx"); 
    lItem.ID = "rmaItem1"; //<-- This is important 
    InstrumentDetail.Controls.Add(lItem); 
} 

希望它有帮助!