用户控件未获取声明性属性值

4

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

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

在此控件的代码后台中,AllowAllDepartments声明如下:
internal bool AllowAllDepartments { get; set; }

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

突发新闻:即使以编程方式设置属性,在我命中控件的Page_Load断点时,该属性值也没有任何效果。以下是宿主页面的Page_Load:

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

你最终解决了这个问题吗? - Peter
4个回答

2
尝试将属性值添加到ViewState中:
protected bool AllowAllDepartments 
{
   get
   {
      if (ViewState["AllowAllDepartments"] != null)
         return bool.Parse(ViewState["AllowAllDepartments"]);
      else
         return false;
   }
   set
   {
      ViewState["AllowAllDepartments"] = value;
   }
}

编辑 此外,您可能希望处理控件的PreRender事件,以查看该控件的属性是否已在那里正确设置。


这可能有效,我会把它作为最后的尝试,但我不应该必须显式地将控件属性添加到视图状态中。我甚至不需要在视图状态中,因为它只对第一次页面加载产生影响。 - ProfK

0
将属性绑定设置为可绑定,如下所示:
[Bindable(true), Category("Appearance"), DefaultValue(false)]
internal bool AllowAllDepartments { get; set; }

0

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

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

0

你尝试过将属性设为公共的吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接