2010-10-15 19 views
7

J'ai un ASCX qui contientComment définir une propriété Int d'un contrôle sur ASCX?

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

Je veux mettre Value avec textbox1.Text, mais Value est un Int32. Je cherche quelque chose comme ceci:

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

Mais je reçois

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

Est-il possible de le faire sur le fichier ASCX? Dois-je implémenter un TypeConverter pour cette propriété?

Répondre

7

Je ne comprends pas pourquoi vous ne pouvez pas simplement utiliser le littéral au lieu d'une représentation de chaîne:

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

Si vous souhaitez définir cette valeur dynamique, vous aurez besoin de le faire dans le code derrière ou dans un bloc de code, par exemple en cas de chargement de la page gérer, comme vous ne pouvez pas utiliser des blocs de code (<%%>) dans un contrôle côté serveur:

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

ou, dans le ascx, en dehors des contrôles côté serveur:

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

Il n'est donc pas possible de définir la valeur 'Value' avec' textBox1.Text' sur le fichier ASCX? – BrunoLM

+0

Vous pouvez le faire avec un bloc de code, tant qu'il est _outside_ le contrôle. Voir la mise à jour – Oded

7

Modifier à

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

L'analyseur ASP.Net analysera automatiquement les propriétés entières.

<%= ... %> Les expressions ne sont pas prises en charge pour les contrôles côté serveur, donc votre code oblige ASP.Net à essayer (et échoue) d'analyser la chaîne littérale <%= Int32.Parse("58") %> en tant qu'entier.