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

Posted

技术标签:

【中文标题】如何使我的 ASP.NET 服务器控件将嵌入的代码块作为属性值?【英文标题】:How do I make my ASP.NET server control take an embedded code block as a property value? 【发布时间】:2010-09-28 01:56:00 【问题描述】:

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

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

但是,当我这样做时,我得到的是确切的字符串 正在显示,而不是我希望看到的属性值。

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

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

我需要对我的自定义控件做些什么来获取这种值?或者我需要对页面做些什么。

【问题讨论】:

【参考方案1】:

你不能。 将字符串直接写入响应流,这发生在构造服务器控件之后。请参阅this post 了解说明。

所以它要么是代码隐藏,要么是像 Zachary 建议的那样

【讨论】:

【参考方案2】:

作为我自己的问题的后续,我发现我真正想要的是使用

这可以在服务器控制端显然不需要额外处理来完成。

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

这很好用。

【讨论】:

【参考方案3】:

尝试使用数据绑定语法: &lt;%# PagePropertyValue %&gt;

【讨论】:

这使它显示为空白,而不是实际的代码字符串。我没有在我的控件上实现数据绑定事件。我使用具有两种设置的 asp 标签控件得到了类似的结果。 (使用文本属性)。 尝试调用 label.DataBind() 它应该显示表达式返回的任何内容。【参考方案4】:

要使绑定属性值按建议正常工作,您将在 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】:

请注意,这是特定于控件属性的。当在控制属性之外使用 将调用正确的方法并将调用结果注入页面中。

【讨论】:

以上是关于如何使我的 ASP.NET 服务器控件将嵌入的代码块作为属性值?的主要内容,如果未能解决你的问题,请参考以下文章

将 asp.net 表单“转换”为 html 表单

WebResource-asp.net自定义控件引用外部资源方法

如何在(asp.net)自定义服务器控件中维护状态?

将图像控件转换为字节数组 Asp.Net

ASP.NET WebForm中JavaScript修改了页面上Label的值,如何在后台代码中获取

Asp.Net:用户控件中的寻呼机不分页