我在我正在维护的ASP.NET应用程序上使用了一组UserControl。
我有一个呈现一组自定义UserControls的页面。在其中一个控件上,让我们说ucA
,我可能会有一个小的Javascript Popup,它会渲染另一个UserControl并让我们称之为ucB
。
在ucA
我定义了一个公共属性,用于设置或获取ucA
中定义的hiddenField的值:
<asp:HiddenField ID="hidWorkDirName" runat="server" />
和属性定义:
public string _hidWorkDirName
{
get { return hidWorkDirName.Value; }
set { hidWorkDirName.Value = value; }
}
我的ucB
仅显示一个文本框,在提交后,应设置hidWorkDirName
的值:
protected void btnSubmit_Click(object sender, EventArgs e)
{
ucA parent = (ucA)this.Parent; //this, being ucB
parent._hidWorkDirName = txtName.Text; //the TextBox value being set on ucA
}
调试时我可以看到值设置正确。
现在,ucA
还有一个提交按钮(两个提交都是针对不同的东西),我想要读取hidWorkDirName
的值。但无论我尝试什么,我得到的值总是一个空字符串,就像没有设置任何东西一样。
我已尝试直接从hiddenField和属性本身(_hidWorkDirName
)读取值,但我从未获得我预先设置的值。
为什么会这样?
答案 0 :(得分:1)
这是因为在Hiddenfield
期间hidWorkDirName
Page_Load
可能会重置。使用ViewState
尝试不同的方法。
这是您ViewState
public string _hidWorkDirName
{
get
{
if (ViewState["WorkDirName"] != null)
{
return (string)ViewState["WorkDirName"];
}
return string.Empty;
}
set
{
ViewState["WorkDirName"] = value;
}
}