【问题标题】:ASP.NET custom control rendering before <%= %> code executes to populate property在执行 <%= %> 代码以填充属性之前呈现 ASP.NET 自定义控件
【发布时间】:2023-03-13 14:02:01
【问题描述】:

我有一个公开属性的自定义控件。当我使用固定值设置它时,一切正常。但是,如果我尝试使用 标签设置它的值,它会有点奇怪:

<cc:CustomControl ID="CustomControl" runat="server" Property1='<%= MyProperty %>' />
<%= MyProperty %>

当它被渲染时,自定义控件下方的 标记会按照我的预期渲染(使用 MyProperty 的值)。但是,当我进入 CustomControl 的 Render 函数时,Property1 的值实际上是字符串“”,而不是 MyProperty 的实际基础值。

【问题讨论】:

    标签: asp.net custom-server-controls


    【解决方案1】:

    您的控件在OnInit 期间从标记初始化。因此,如果该语法有效,它无论如何都不会产生您想要的效果,因为 MyProperty 将在 OnInit 期间进行评估,而不是在渲染时进行评估(就像第二次使用一样)。

    您想改用数据绑定语法:

    <cc:CustomControl ID="CustomControl" runat="server" Property1='<%# MyProperty %>' />
    

    只需确保在容器(页面、用户控件等)上调用 DataBind()

    或者,您可以在后面的代码中设置属性:

    CustomControl.Property1 = MyProperty;
    

    【讨论】:

    • 没有更好的答案吗?我一直使用带有 MS 控件的 语法。不应该有办法对自定义控件做同样的事情。
    • 你是如何在 MS 控件中使用该语法的?
    【解决方案2】:

    在 CustomControl 中尝试 看看是否可行。

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多