代码之家  ›  专栏  ›  技术社区  ›  Jeff Martin

如何使我的ASP.NET服务器控件将嵌入的代码块作为属性值?

  •  7
  • Jeff Martin  · 技术社区  · 16 年前

    我有一个具有标题属性的自定义服务器控件。使用该控件时,我希望在ASPX页中设置标题的值,如下所示:

    <cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
    more content
    </cc1:customControl>
    

    但是,当我这样做时,我得到的是显示的字符串<%=pagePropertyValue%>,而不是我希望看到的属性值。

    因此,在尝试数据绑定表达式之后(如下所示)。我没有得到看起来很糟糕的字符串文字,但我也没有得到其他任何东西。

    <cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
    more content
    </cc1:customControl>
    

    我需要对自定义控件做什么才能获得这种值?或者我需要对页面做些什么。

    5 回复  |  直到 15 年前
        1
  •  7
  •   Community CDub    7 年前

    你不能。<%=%>将直接将字符串写入响应流,这在构建服务器控件之后发生。见 this post 为了解释。

    所以它要么是codebehind,要么是Zachary建议的<%+数据绑定。

        2
  •  2
  •   Jeff Martin    16 年前

    作为我自己问题的后续问题,我发现我真正想要的是使用使用<%$语法的ASP.NET表达式,因为我想做的是将内容本地化。

    显然,在服务器控制端没有额外的处理可以做到这一点。

    <cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
    more content and controls
    </cc1:customControl>
    

    这个很好用。

        3
  •  1
  •   Zachary Yates    16 年前

    尝试使用数据绑定语法: <%# PagePropertyValue %>

        4
  •  1
  •   baptiste    16 年前

    为了使bind属性值按建议正确工作,您将在aspx或ascx文件中包含此值:

    <cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
    more content
    </cc1:customControl>
    

    然后,您将需要实际绑定页面中的数据,您必须将其添加到代码隐藏文件中(代码在C中)

    protected void Page_Load(object sender, EventArgs e)
    {
        DataBind();
    }
    

    这样它将绑定您的ascx或aspx文件中的数据。

        5
  •  0
  •   Jonx    15 年前

    请注意,这是特定于控件属性的。当使用<%=syntax outside control属性时,意味着页面中的任何其他地方的语法都按预期工作。所以这个 <%=getCapitalUsername()%> 将调用正确的方法并将调用的结果插入到页面中。

    推荐文章