Web 窗体错误消息:"This is not scriptlet. Will be output as plain text"



在我的ASP .NET Web Forms中,我有以下声明性代码:

<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";
}

然而,编辑时编译器警告我"这不是脚本[原文如此]。将输出为纯文本"。正如它所说,css 类的字面意思是"<%=TEXTBOX_CSS_CLASS%>"。

此错误消息是什么意思,是否有解决方法,以便我仍然可以在基类中使用常量?

不能使用 <%= ... %> 来设置服务器端控件的属性。内联表达式<% %>只能在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文件中提取自定义应用程序设置和连接字符串信息。例:

  • 资源
  • 连接字符串
  • 应用设置

因此,如果要从web.config文件的<appSettings>部分中检索名为 className 的应用程序设置,可以使用以下表达式:

<asp:TextBox runat="server" Text="<%$ AppSettings:className %>" /> 

但是,上面的代码段不是从应用设置中读取类名的标准。

您可以构建和使用自己的自定义ExpressionBuilders或使用代码隐藏作为:

txtbox.CssClass = TEXTBOX_CSS_CLASS;

查看有关生成自定义表达式生成器的链接。构建自定义表达式后,可以显示如下值:

<asp:TextBox Text="<%$ SetValue:SomeParamName %>"
    ID="setting" 
    runat="server" />

问题是你不能将runat=server控件与<%= .. %>代码块混合使用。正确的方法是使用代码隐藏:txtbox.CssClass = TEXTBOX_CSS_CLASS;

这将起作用。

标记

<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' />

代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        txtbox.DataBind();
    }
}

但是在Page_Load上访问asp:TextBoxCssClass属性要干净得多

相关内容

最新更新