在我的ASP .NET Web窗体中,我有以下声明性代码:
<asp:TextBox runat="server" ID="txtbox" CssClass='<%=TEXTBOX_CSS_CLASS%>' />
Run Code Online (Sandbox Code Playgroud)
常量TEXTBOX_CSS_CLASS在页面的代码隐藏类继承自的基类中定义:
public class MyPageBase : Page
{
protected internal const string TEXTBOX_CSS_CLASS = "myClass";
}
Run Code Online (Sandbox Code Playgroud)
然而,编辑时编译器警告我"这不是scriptlet [原文如此].将输出为纯文本".按照它的说法,css类按字面意思"<%= TEXTBOX_CSS_CLASS%>"呈现.
这个错误消息是什么意思,是否有一个解决方法,所以我仍然可以在基类中使用常量?
R.C*_*R.C 32
您不能用于<%= ... %>设置服务器端控件的属性.内联表达式<% %>只能在aspx页面或用户控件的顶级文档级别使用,但不能嵌入服务器控件的标记属性(例如 <asp:Button... Text =<% %> ..>)中.
如果TextBox位于DataView的控件(如GridView,ListView)中,则可以使用:<%# %>syntax.或者您可以DataBind()通过代码隐藏或内联服务器脚本显式调用控件.
<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' />
Run Code Online (Sandbox Code Playgroud)
//代码在文件后面
protected void Page_Load(object sender, EventArgs e)
{
txtbox.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
ASP.NET包含很少的内置表达式构建器,允许您从web.config文件中提取自定义应用程序设置和连接字符串信息.例:
因此,如果要检索className从文件<appSettings>部分命名的应用程序设置web.config,可以使用以下表达式:
<asp:TextBox runat="server" Text="<%$ AppSettings:className %>" />
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码段不是从Appsettings中读取类名的标准.
您可以构建和使用自己的自定义ExpressionBuilders或使用后面的代码:
txtbox.CssClass = TEXTBOX_CSS_CLASS;
Run Code Online (Sandbox Code Playgroud)
检查此链接以构建自定义表达式构建器.构建自定义Expression后,您可以显示如下值:
<asp:TextBox Text="<%$ SetValue:SomeParamName %>"
ID="setting"
runat="server" />
Run Code Online (Sandbox Code Playgroud)
Han*_*ing 15
问题是你不能将runat=server控件与<%= .. %>代码块混合使用.正确的方法是使用后面的代码:txtbox.CssClass = TEXTBOX_CSS_CLASS;.
这会奏效.
标记
<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' />
Run Code Online (Sandbox Code Playgroud)
代码隐藏
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtbox.DataBind();
}
}
Run Code Online (Sandbox Code Playgroud)
但它有很多清洁访问CssClass的属性asp:TextBox上Page_Load
| 归档时间: |
|
| 查看次数: |
13402 次 |
| 最近记录: |