我有一个看起来像这样的网络控件
public class Foo : WebControl
{
[Bindable(true)]
[Category("Default")]
[DefaultValue("")]
[Localizable(true)]
public string Bar { get; set; }
protected override void Render(HtmlTextWriter output)
{
output.WriteLine(Bar);
}
}
我想把这个 webcontrol 放在我的 aspx 页面中,如下所示:
<cc1:Foo Bar="<%= Fa.La.La %>/otherstuff" runat="server" />
(显然这段代码是为了显示问题而简化的)
在我的 Render 方法中,不评估变量 Fa.La.La。它以原始文本“”形式出现,我该如何评估它?
我并不特别关心变量是如何传入的。如果变量以 的形式传入,则可以对其求值,那就可以了。关键是我有一些服务器端变量需要在调用 Render() 方法之前/同时进行评估。
我唯一能想到的就是使用正则表达式来获取 的内容并使用反射或其他东西,但必须有一种更优雅的方法来做到这一点。
这个问题非常类似于在 href 中使用带有 runat=server 的服务器变量 https://stackoverflow.com/q/4306850/24267,但并不完全相同,因为没有一个答案有用。
好吧,首先您应该清楚区分这两个标签。
以下是我阅读过并实际使用过的一些要点。
- The
<%=
表达式在渲染时计算
- The
<%#
表达式的计算时间为DataBind()
时间并且根本不被评估,如果
未调用 DataBind()。
-
<%#
表达式可以用作属性
在服务器端控件中。<%=
表达式不能。
阅读更多内容MSDN 博客 http://blogs.msdn.com/b/dancre/archive/2007/02/13/the-difference-between-lt-and-lt-in-asp-net.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)