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?
This will work.
Mark up
Code-behind
But its a lot cleaner to access the
CssClass
property of theasp:TextBox
onPage_Load
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 explicitlyDataBind()
on the control from code-behind or inline server script.// code Behind file
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:So, if you want to retrieve an application setting named
className
from the<appSettings>
portion of theweb.config
file, you can use the following expression: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:Check this link on building Custom Expression builders. Once you build your custom Expression you can display value like:
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;
.