【问题标题】:Is it possible to 'DataBind' a single property of a user control?是否可以“数据绑定”用户控件的单个属性?
【发布时间】:2011-05-19 20:20:39
【问题描述】:

在我回答这个问题之前,让我先介绍一下背景。我正在尝试开发一种自定义缓存机制,我可以将其应用于自定义构建的用户控件。 (请注意,我知道 .NET 中有一些内置的缓存机制)根据在标记中以声明方式设置的某些标志,控件应加载其先前呈现的内容的缓存版本或正常执行(如果某些标志设置它应该在下次加载时生成其内容的缓存)。我希望能够在标记中以声明方式传递某些标志,并能够在页面初始化时检查它们的值,并根据标志值确定控件是否应加载缓存版本。

<uc:MyUC ID="N1" runat="server"
   CacheProp='<%# SomeEnum.A | SomeEnum.B |SomeEnum.C %>'
   PropA='<%# this.SomePropA %>' 
   PropB='<%# (this.SomePropB %>'
   PropC='<%# this.SomePropC %>'
/>

我面临的问题是,据我所知,如果我调用 DataBind(),我只能获取在标记中以声明方式分配的属性的值。但是我面临两个问题: 首先从MyUC 中调用this.DataBind() 将触发其所有子控件的绑定,这将破坏缓存的目的;还构建了所有用户控件,以便在LoadComplete 事件触发之前它们不会调用DataBind(),因此要确保它们所在的父控件已完成初始化并计算了以声明方式传递给的属性子用户控件(即PropAPropBPropC)。

现在的问题是:有没有办法绑定CacheProp 属性,以便在不绑定所有其他属性且不触发其所有子控件的数据绑定的情况下检索其值?

感谢您的帮助!

朱塞佩

【问题讨论】:

  • 我开始认为这是不可能的! :(
  • 为什么不只是&lt;uc:MyUC ID="N1" runat="server" CacheProp="SomeEnum.A" ...&gt;?你想如何设置这些属性?
  • 不幸的是,这不起作用,因为它将属性“SomeEnum.A | SomeEnum.B |SomeEnum.C” 作为字符串传递,而不是按位 OR 的评估值。

标签: .net asp.net data-binding user-controls page-lifecycle


【解决方案1】:

这应该可行:

&lt;uc:MyUC ID="N1" runat="server" CacheProp="A|B|C"... &gt;

后面的代码:

strRawValue = N1.Attributes["CacheProp"];
string[] arrValues = strRawValue.Split('|');
SomeEnum value = (SomeEnum)Enum.Parse(typeof(SomeEnum), arrValues[0]);
for (int i = 1; i < arrValues.Length; i++)
    value |= (SomeEnum)Enum.Parse(typeof(SomeEnum), arrValues[i]);

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 2011-04-01
    • 2014-01-27
    • 2010-12-07
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2011-11-02
    相关资源
    最近更新 更多