Comment puis-je faire mon contrôle serveur ASP.NET prendre un bloc de code intégré en tant que valeur de la propriété?

StackOverflow https://stackoverflow.com/questions/387167

Question

J'ai un contrôle serveur personnalisé avec une propriété du titre. Lorsque vous utilisez la commande, je voudrais définir la valeur du titre dans la page ASPX comme ceci:

<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>

Quand je fais cela, cependant, je reçois la chaîne exacte <% = PagePropertyValue%> affichée plutôt que la valeur de la propriété que je voudrais voir.

Alors après avoir essayé l'expression de liaison de données (comme suggéré ci-dessous). Je ne comprends pas le sens littéral de chaîne qui avait l'air mal mais je ne reçois rien d'autre non plus.

<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>

Que dois-je faire pour mon contrôle personnalisé pour prendre ce genre de valeur? Ou est-il quelque chose que je dois faire à la page.

Était-ce utile?

La solution

Tu ne peux pas. <% =%> Va écrire la chaîne directement au-flux de réponse, ce qui arrive après que la commande du serveur est construit. Voir ce message pour une explication.

Alors son soit codebehind, soit <% # + databinding comme Zachary suggère.

Autres conseils

En tant que suivi à ma propre question, j'ai découvert que ce que je voulais vraiment était d'utiliser ASP.NET expressions utilisant le <% syntaxe $, puisque ce que je voulais faire était de mettre dans le contenu localisé.

Cela peut être fait avec apparemment aucune manipulation supplémentaire du côté de commande du serveur.

<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>

Cela fonctionne très bien.

Essayez d'utiliser la syntaxe de liaison de données: <%# PagePropertyValue %>

Pour la valeur de la propriété se lient à fonctionner correctement comme suggéré, vous aurez ceci dans le fichier ASPX ou ascx:

<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>

Vous aurez alors besoin de lier effectivement les données dans votre page wich vous devez ajouter ceci dans votre code behind (code en C #)

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

De cette façon, il va se lier les données dans votre fichier ascx ou ASPX.

Notez que ceci est spécifique pour contrôler les attributs. Lorsque vous utilisez la balise <% = syntaxe en dehors des attributs de contrôle signifie nulle part ailleurs dans la page la syntaxe fonctionne comme prévu. Donc ça              <% = GetCapitalUserName ()%>      appellerait la bonne méthode et injecter le résultat de l'appel dans la page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top