2009-09-01 16 views
5
<asp:TextBox ID="tbName" CssClass="formField" MaxLength="<%=Constants.MaxCharacterLengthOfGameName %>" runat="server"></asp:TextBox> 

El código anterior no funciona. Puedo establecer la propiedad MaxLength del cuadro de texto en el código, pero prefiero no hacerlo. ¿Puedo configurar la propiedad MaxLength en el código front-end como se indica arriba?¿Puedo usar <%= ... %> para establecer una propiedad de control en ASP.NET?

+3

¿Por qué se quiere evitar código subyacente? – AnthonyWJones

Respuesta

13

Usted podría utilizar DataBinding:

<asp:TextBox 
    ID="tbName" 
    CssClass="formField" 
    MaxLength="<%# Constants.MaxCharacterLengthOfGameName %>" 
    runat="server"> 
</asp:TextBox> 

y en su código detrás de la llamada Load:

tbName.DataBind(); 

o directamente databind la página:

this.DataBind(); 
3

¿Por qué no lo configura en la función de devolución de llamada Page_Init en el código?

6

La sintaxis <% = expression%> se traduce en Response.Write (expresión), inyectando el valor de la expresión en la salida representada de la página. Porque <% = expression%> se traduce (esencialmente) en Response.Write estas sentencias no se pueden usar para establecer los valores de las propiedades de control web. En otras palabras, no se puede tener marcado como el siguiente:

<asp:Label runat="server" id="CurrentTime" Text="<%= DateTime.Now.ToString() %>" /> 

Fuente: http://aspnet.4guysfromrolla.com/articles/022509-1.aspx

1

Parece que usted quiere ser capaz de controlar la longitud máxima de un tipo específico de cuadro de texto a partir de una ubicación única, de modo que si esa longitud máxima necesita cambiarse, solo necesita cambiarla en un solo lugar.

Puede lograr esto utilizando un archivo de máscara. Establece la longitud máxima en el archivo de máscara como lo haría normalmente y luego cualquier cuadro de texto que use esa longitud máxima usaría la máscara. Si la longitud cambia, solo necesita cambiar el archivo de máscara.

4

Como dijo Ropstah, que no va a trabajar con el <% = expresión%> sintaxis.

Pero probablemente podría utilizar el enlace de datos, que solo requiere que utilice la sintaxis <% # expression%> y luego invoque MyTextBox.Databind en CodeBehind.

Por supuesto, en ese punto podría ser más claro realizar toda la operación en CodeBehind.

Otra alternativa: si realmente quiere que esto sea declarativo, podría alejarse de la etiqueta e incrustar su expresión en una etiqueta span. De esta manera todavía puede aplicar CSS, etc. y creo que <% = expresión %> la sintaxis funcionaría.

1

Usted puede hacerlo con el enlace de datos

<asp:TextBox 
    ID="tbName" 
    CssClass="formField" 
    MaxLength='<%# Constants.MaxCharacterLengthOfGameName %>' 
    runat="server" /> 

Luego, en el código detrás

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

Puede incrustar código "normal" en el archivo .aspx si así lo desea, como:

<% 
tbName.MaxLength = Constants.MaxCharacterLengthOfGameName 
%> 
<asp:TextBox ID="tbName" CssClass="formField" runat="server"></asp:TextBox> 

Esto se remonta a un estilo más antiguo " clásico "ASP" forma de hacer esto.

6

intenta utilizar la expresión personalizada constructor:

// from http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx 
[ExpressionPrefix("Code")] 
public class CodeExpressionBuilder : System.Web.Compilation.ExpressionBuilder 
{ 
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, 
     object parsedData, ExpressionBuilderContext context) 
    { 
     return new CodeSnippetExpression(entry.Expression); 
    } 
} 

y luego usarlo como

<asp:TextBox ID="tbName" CssClass="formField" MaxLength="<%$ Code: Constants.MaxCharacterLengthOfGameName %>" runat="server"></asp:TextBox> 
+0

+1. Tenga en cuenta que el valor de ExpressionBuilder se evalúa * una vez *, por lo que es bueno para las constantes, malo para muchas otras cosas. – devstuff

+0

+1 Esta es realmente una gran solución, no se hincha el viewstate con ella. Olvidé todo sobre esta característica. – Bob

Cuestiones relacionadas