【问题标题】:User Control not getting declarative property value用户控件未获得声明性属性值
【发布时间】:2009-11-25 10:02:23
【问题描述】:

我在 Web 表单上有一个用户控件,声明如下:

<nnm:DeptDateFilter ID="deptDateFilter" runat="server" AllowAllDepartments="True" />

在此控件的代码隐藏中,AllowAllDepartments 声明如下:

internal bool AllowAllDepartments { get; set; }

然而,当我查看页面并在控件的Page_Load 事件处理程序中设置断点时,我的AllowAllDepartments 属性始终为假。这可能是什么原因?

突发新闻:当我在控件的 Page_Load 中点击断点时,即使以编程方式设置属性也不会影响属性值。这是主机页面的Page_Load:

deptDateFilter.FilterChanged += deptDateFilter_FilterChanged;
if (!IsPostBack)
{
    deptDateFilter.AllowAllDepartments = true;
    PresentReport();
}

【问题讨论】:

  • 你有想过这个吗?

标签: asp.net user-controls


【解决方案1】:

尝试将属性值添加到 ViewState:

protected bool AllowAllDepartments 
{
   get
   {
      if (ViewState["AllowAllDepartments"] != null)
         return bool.Parse(ViewState["AllowAllDepartments"]);
      else
         return false;
   }
   set
   {
      ViewState["AllowAllDepartments"] = value;
   }
}

编辑 此外,您可能需要处理控件的 PreRender 事件,以查看控件的属性是否已正确设置。

【讨论】:

  • 这可能行得通,我会尝试作为最后的手段,但我不应该显式地将控件属性添加到视图状态。我什至不需要它在视图状态中,因为它只对第一页加载有影响。
【解决方案2】:

使属性可绑定,如:

[Bindable(true), Category("Appearance"), DefaultValue(false)]
internal bool AllowAllDepartments { get; set; }

【讨论】:

    【解决方案3】:

    只是出于好奇...如果您不使用 get;set; 是否可以正常工作?快捷方式?

    private bool _allowAllDepartments;
    public bool AllowAllDepartments
    {
        get { return _allowAllDepartments; }
        set { _allowAllDepartments = value;}
    }
    

    【讨论】:

      【解决方案4】:

      您是否尝试过公开该属性?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多