asp.net - pages - Mensaje de error de formularios web: "Esto no es scriptlet. Saldrá como texto sin formato ”
web forms c# ejemplos (3)
En mis formularios web ASP .NET tengo el siguiente código declarativo:
<asp:TextBox runat="server" ID="txtbox" CssClass=''<%=TEXTBOX_CSS_CLASS%>'' />
La constante TEXTBOX_CSS_CLASS se define en una clase base que la clase de código subyacente de la página hereda de:
public class MyPageBase : Page
{
protected internal const string TEXTBOX_CSS_CLASS = "myClass";
}
Sin embargo, el compilador en tiempo de edición me advierte que "Esto no es scriptlet [sic]. Se imprimirá como texto sin formato". Fiel a su palabra, la clase css se representa literalmente como "<% = TEXTBOX_CSS_CLASS%>".
¿Qué significa este mensaje de error? ¿Existe alguna solución para que pueda usar una constante en una clase base?
El problema es que no se pueden combinar los controles de runat=server
con <%= .. %>
bloques de código. La forma correcta sería usar el código detrás de: txtbox.CssClass = TEXTBOX_CSS_CLASS;
.
Esto funcionará.
Margen
<asp:TextBox runat="server" ID="txtbox" class=''<%# TEXTBOX_CSS_CLASS %>'' />
Código detrás
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtbox.DataBind();
}
}
Pero es mucho más fácil acceder a la propiedad CssClass
de asp:TextBox
en Page_Load
No puede usar <%= ... %>
para establecer las propiedades de los controles del lado del servidor. Las expresiones en línea <% %>
%% <% %>
solo se pueden usar en la página aspx o en el nivel superior del documento de control del usuario, pero no se pueden incrustar en el atributo de etiqueta del control del servidor (como <asp:Button... Text =<% %> ..>
) .
Si su TextBox está dentro de un control de DataBound como GridView, ListView ... puede usar la sintaxis: <%# %>
. O puede llamar explícitamente a DataBind()
en el control desde el código detrás del script o el servidor en línea.
<asp:TextBox runat="server" ID="txtbox" class=''<%# TEXTBOX_CSS_CLASS %>'' />
// código detrás del archivo
protected void Page_Load(object sender, EventArgs e)
{
txtbox.DataBind();
}
ASP.NET incluye algunos constructores de expresiones incorporados que le permiten extraer configuraciones de aplicaciones personalizadas e información de cadenas de conexión del archivo web.config
. Ejemplo:
- Recursos
- ConexiónStrings
- Ajustes de Aplicacion
Por lo tanto, si desea recuperar una configuración de aplicación llamada className
de la parte <appSettings>
del archivo web.config
, puede usar la siguiente expresión:
<asp:TextBox runat="server" Text="<%$ AppSettings:className %>" />
Sin embargo, el fragmento de código anterior no es un estándar para leer los nombres de clase de las configuraciones de aplicaciones.
Puede crear y usar sus propios ExpressionBuilders
personalizados o Usar el código detrás como:
txtbox.CssClass = TEXTBOX_CSS_CLASS;
Compruebe este enlace en la construcción de constructores de expresiones personalizadas. Una vez que construya su Expresión personalizada, puede mostrar un valor como:
<asp:TextBox Text="<%$ SetValue:SomeParamName %>"
ID="setting"
runat="server" />