Web Forms error message: "This is not scriptlet. Will be output as plain text"

14,626

Solution 1

You cannot use <%= ... %> to set properties of server-side controls. Inline expressions <% %> can only be used at aspx page or user control's top document level, but can not be embeded in server control's tag attribute (such as <asp:Button... Text =<% %> ..>).

If your TextBox is inside a DataBound controls such as GridView, ListView .. you can use: <%# %> syntax. OR you can call explicitly DataBind() on the control from code-behind or inline server script.

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

// code Behind file

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

ASP.NET includes few built-in expression builders that allows you to extract custom application settings and connection string information from the web.config file. Example:

  • Resources
  • ConnectionStrings
  • AppSettings

So, if you want to retrieve an application setting named className from the <appSettings> portion of the web.config file, you can use the following expression:

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

However, above snippet isn't a standard for reading classnames from Appsettings.

You can build and use either your own Custom ExpressionBuilders or Use code behind as:

txtbox.CssClass = TEXTBOX_CSS_CLASS;

Check this link on building Custom Expression builders. Once you build your custom Expression you can display value like:

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

Solution 2

The problem is that you can't mix runat=server controls with <%= .. %>code blocks. The correct way would be to use code behind: txtbox.CssClass = TEXTBOX_CSS_CLASS;.

Solution 3

This will work.

Mark up

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

Code-behind

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

But its a lot cleaner to access the CssClass property of the asp:TextBox on Page_Load

Share:
14,626

Related videos on Youtube

cbp
Author by

cbp

Updated on June 03, 2022

Comments

  • cbp
    cbp almost 2 years

    In my ASP .NET Web Forms I have the following declarative code:

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

    The constant TEXTBOX_CSS_CLASS is defined in a base class that the page's code-behind class inherits from:

    public class MyPageBase : Page
    {
        protected internal const string TEXTBOX_CSS_CLASS = "myClass";
    }
    

    The edit-time compiler however warns me that "This is not scriptlet [sic]. Will output as plain text". True to its word, the css class is rendered as literally "<%=TEXTBOX_CSS_CLASS%>".

    What does this error message mean and is there a workaround so I can still use a constant in a base class?

  • spankmaster79
    spankmaster79 over 9 years
    where does the weird <%# syntax come from?
  • naveen
    naveen over 9 years
    @spankmaster79: just read the above answer for a detailed explanation.