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é?
-
23-08-2019 - |
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.
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.