Remplissage plusieurs littéraux avec la même valeur
Question
J'ai plusieurs littéraux sur une page. Par exemple,
<asp:Literal id="Label1" runat="server" />
J'ai environ 10 de ces derniers sur une page et que vous voulez les remplir tous la même valeur. Y at-il une bonne façon de le faire sans faire référence à l'identifiant pour chaque contrôle?
La solution
Créer une propriété publique qui détient la valeur que vous souhaitez afficher et dans l'utilisation de ASPX
<%= propertyName %>
partout où vous souhaitez afficher la valeur.
Autres conseils
Si vous utilisez des fichiers de ressources, vous pouvez définir la méta. Attribut resourcekey à la même valeur pour tous les 10 d'entre eux
La seule façon que je l'ai vu faire est de rendre l'id est un nom loopable (par exemple Label1 - Label10) et la boucle par référence à l'identifiant. Mais nous n'avons pas essayé trop dur pour une autre solution!
Les littéraux situés dans un seul conteneur (par exemple, un groupe spécial) ou sont-ils jonchaient au sujet de la page? Si elles sont dans un seul conteneur qui ne contient pas trop d'autres contrôles non pertinents, ce serait aussi simple que boucle à travers la collection Controls du conteneur.
Oui, je suis bien conscient qu'une page est un conteneur aussi bien, mais il est presque toujours très inefficace à boucle à travers tous les contrôles dans une page. Je ne recommanderais pas du tout.
Comment sont vos étiquettes nommées. Si elles ont une convention d'appellation commune comme Label1 - Label10 alors vous pouvez faire
for(int i = 1; i <= 10; i++)
{
Literal l = Page.FindControl(string.Format("Label{0}", i)) as Literal
if(l != null)
l.Text = "Whatever";
}
S'ils ne sont pas nommés de même, vous pouvez simplement coller les noms d'étiquettes dans un tableau et une boucle à travers qu'au lieu d'avoir 10 déclarations explicites .Text =
. par exemple.
string [] litNames = new string [] { "litFirst", "otherLit", "someOtherVar" }
foreach(string s in litNames)
{
Literal l = Page.FindControl(s) as Literal
if(l != null)
l.Text = "Whatever";
}