如何使我的 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】:尝试使用数据绑定语法:
<%# PagePropertyValue %>
【讨论】:
这使它显示为空白,而不是实际的代码字符串。我没有在我的控件上实现数据绑定事件。我使用具有两种设置的 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 服务器控件将嵌入的代码块作为属性值?的主要内容,如果未能解决你的问题,请参考以下文章
WebResource-asp.net自定义控件引用外部资源方法