跨用户控件属性设置和保留值

Cross UserControl property setting and persisting values

本文关键字:保留 设置 属性 用户 控件      更新时间:2023-09-26

我在维护的 ASP.NET 应用程序上使用一组用户控件。

我有一个呈现一组自定义用户控件的页面。在其中一个控件上,假设ucA,我可能有一个小的Javascript弹出窗口,它可以呈现另一个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的值。但是无论我尝试什么,我得到的值总是一个空字符串,就好像什么都没有设置一样。

我尝试直接从隐藏字段和属性本身(_hidWorkDirName(读取值,但我从未得到我之前设置的值。

为什么会这样?

这是因为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;
    }
}