2010-10-15 15 views
7

que tienen un ASCX que contiene¿Cómo establecer una propiedad Int de un control en ASCX?

<my:Foo ID="Bar" runat="server" Value='' /> 

Quiero configurar Value con textbox1.Text, pero Value es un Int32. Busco algo como esto:

<my:Foo ID="Bar" runat="server" Value='<%= Int32.Parse(textbox1.Text) %>' /> 

Pero consigo

Parser Error Message: Cannot create an object of type 'System.Int32' from its string representation '<%= Int32.Parse(textbox1.Text) %>' for the 'Value' property. 

¿Hay una manera de hacer esto en el archivo ASCX? ¿Debo implementar un TypeConverter para esta propiedad?

Respuesta

7

No entiendo por qué no puede simplemente utilizar el literal en lugar de una representación de cadena:

<my:Foo ID="Bar" runat="server" Value="58" /> 

Si desea establecer este valor de forma dinámica, tendrá que hacerlo en el código subyacente o dentro de un bloque de código, por ejemplo, en el caso de carga de la página de manejar, ya que no puede utilizar los bloques de código (<%%>) dentro de un control del lado del servidor:

// code behind, in the page_load event handler 
Bar.Value = 58; 

o, dentro del ascx, fuera de los controles del lado del servidor:

<% Bar.Value = 58; %> 
+0

¿No es posible establecer 'Value' con el valor' textBox1.Text' en el archivo ASCX? – BrunoLM

+0

Puede hacerlo dentro de un bloque de código, siempre que sea _outside_ el control. Ver respuesta actualizada. – Oded

7

cambiarlo a

<my:Foo ID="Bar" runat="server" Value="58" /> 

El analizador ASP.Net analizará automáticamente las propiedades de enteros.

<%= ... %> las expresiones no son compatibles con los controles del lado del servidor, por lo que su código provoca que ASP.Net intente (y falle) analizar la cadena literal <%= Int32.Parse("58") %> como un número entero.

Cuestiones relacionadas