【问题标题】:How to set custom object property on ASP.NET WebControl through markup如何通过标记在 ASP.NET WebControl 上设置自定义对象属性
【发布时间】:2012-10-03 18:18:53
【问题描述】:

我正在努力如何设置一个自定义属性,该属性应该指向我在 ASP.NET 网络控件上的自定义类的一个实例。

Web 控件示例:

public class CustomControl : System.Web.UI.WebControls.Panel
{
  public IFactory Factory { get; set; }
}

后面的代码:

public partial class Main : System.Web.UI.Page
{        
  public IFactory GetFactory { 
    get { return new CustomFactory(); } 
  }
}

public class CustomFactory : IFactory {}

自定义工厂在后面的代码上进行初始化。在我的标记中(不在代码后面),我需要将 CustomControl 上的 Factory 属性设置为后面代码中的实例。 我尝试过的任何内联代码变体都不起作用:

<asp:CustomControl ID="MyCustomControl" Factory="<%GetFactory%>" runat="server" />
<asp:CustomControl ID="MyCustomControl" Factory="<%=GetFactory%>" runat="server" />

任何人都可以帮助如何做到这一点?

【问题讨论】:

  • 为什么必须在标记中?
  • 保持后面的代码更干净。
  • 我不确定这是不是一个好的推理——试图让代码保持清洁,你就是在搞砸标记。我不一定看到添加一行代码如何使后面的代码变得混乱。
  • 我的想法是用户将控件放到 aspx 中并在那里设置其所有属性,而不必去后面的代码做任何其他事情。

标签: c# asp.net custom-controls web-controls


【解决方案1】:

您只是不能在控件标记标记上分配它,标记标记呈现为 html 并且没有逻辑这样做,html 不会解释 GetFactory 的结果。 您可以做的是在您的标记上设置 if,而不是控件标记属性,而是在代码括号内设置,就像这样:

<%MyCustomControl.Factory = this.GetFactory;%>

【讨论】:

  • 我试过了,但是在自定义控件的 OnInit 上,Factory 属性为空。上面的代码是否在 OnPreRender 上执行?
  • Factory 属性是否为 null 无关紧要,因为您将其值设置为 this.GetFactorynull 可能是控件。为了更好地理解这一点,请查看page lifecycle 上发生的情况(请参阅渲染部分)
  • 我想说的是,我可以按照您的建议去做,但是该分配将在 OnPreRender 事件之后发生,这对我来说太迟了。
猜你喜欢
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 2018-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多