在我的ASP.NET Web窗体我有以下声明性代码:
<asp:TextBox runat="server" ID="txtBox" CssClass='<%=TEXTBox_CSS_CLASS%>' />
常量TEXTBox_CSS_CLASS在页面的代码隐藏类继承自的基类中定义:
public class MyPageBase : Page { protected internal const string TEXTBox_CSS_CLASS = "myClass"; }
然而编辑时编译器却告诫我,“这不是scriptlet [sic],会输出为纯文本”。
对于它的单词,css类按字面上呈现为“<%= TEXTBox_CSS_CLASS%>”。
解决方法
您不能使用<%= ...%>设置服务器端控件的属性。
内联表达式<%%>只能用在
aspx页面或用户控件的顶级文档级别,但无法嵌入
服务器控件的标签属性(例如< asp:Button ... Text =<%%> ..>)。
内联表达式<%%>只能用在
aspx页面或用户控件的顶级文档级别,但无法嵌入
服务器控件的标签属性(例如< asp:Button ... Text =<%%> ..>)。
如果您的TextBox位于DataBound控件(如GridView,ListView ..)中,您可以使用:<%#%>句法。或者您可以从代码隐藏或内联服务器脚本显式调用控件上的DataBind()。
<asp:TextBox runat="server" ID="txtBox" class='<%# TEXTBox_CSS_CLASS %>' />
protected void Page_Load(object sender,EventArgs e) { txtBox.DataBind(); }
ASP.NET包含很少的内置表达式构建器,可以从web.config文件中提取自定义应用程序设置和连接字符串信息。例:
>资源
> ConnectionStrings
> AppSettings
因此,如果要从< appSettings>中检索名为className的应用程序设置web.config文件的一部分,您可以使用以下表达式:
<asp:TextBox runat="server" Text="<%$ AppSettings:className %>" />
但是,以上代码片段不是从Appsettings中读取类名的标准。
您可以构建和使用您自己的Custom ExpressionBuilders或使用后面的代码:
txtBox.CssClass = TEXTBox_CSS_CLASS;
Check this link建立自定义表达式构建器。
一旦您构建您的自定义表达式,您可以显示如下值:
<asp:TextBox Text="<%$ SetValue:SomeParamName %>" ID="setting" runat="server" />