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

时间:2008-12-22 19:56:58

标签: asp.net web-controls servercontrols

我有一个自定义服务器控件,其属性为Title。使用控件时,我想在aspx页面中设置标题的值,如下所示:

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

然而,当我这样做时,我得到的确切字符串&lt;%= PagePropertyValue%&gt;显示而不是我想看到的属性值。

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

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

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

5 个答案:

答案 0 :(得分:7)

你不能。 &lt;%=%&gt;将字符串直接写入响应流,这在构造服务器控件之后发生。有关说明,请参阅this post

所以它的代码隐藏,或Zachary建议的&lt;%#+数据绑定。

答案 1 :(得分:2)

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

这可以通过服务器控制端显然没有额外处理来完成。

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

这很好用。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

要使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文件中的数据。

答案 4 :(得分:0)

请注意,这特定于控件属性。当使用&lt;%=语法外部控制属性意味着页面中的任何其他位置时,语法按预期工作。所以这              &LT;%= GetCapitalUserName()%&GT;      将调用正确的方法并在页面中注入调用的结果。