Cross UserControl属性设置和持久值

时间:2014-12-09 04:20:55

标签: javascript c# asp.net user-controls

我在我正在维护的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)读取值,但我从未获得我预先设置的值。

为什么会这样?

1 个答案:

答案 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;
    }
}