Web窗体错误消息:"这不是scriptlet.将输出为纯文本"

cbp*_*cbp 27 asp.net webforms

在我的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文件中提取自定义应用程序设置和连接字符串信息.例:

  • 资源
  • 的ConnectionStrings
  • 的AppSettings

因此,如果要检索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;.


nav*_*een 8

这会奏效.

标记

<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:TextBoxPage_Load