【问题标题】:Cross UserControl property setting and persisting values跨 UserControl 属性设置和持久值
【发布时间】:2014-12-09 04:20:54
【问题描述】:

我正在维护的 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 的值。但无论我尝试什么,我得到的值总是一个空字符串,就好像什么都没有设置一样。

我尝试直接从 hiddenField 和属性本身 (_hidWorkDirName) 读取值,但我从来没有得到我预先设置的值。

为什么会这样?

【问题讨论】:

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


    【解决方案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;
        }
    }
    

    【讨论】:

    • 这就是答案。谢谢!提醒我这些天给你买啤酒.. ;)
    • 忘记了,抱歉 ;)
    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多