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?

Était-ce utile?

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";
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top