2010-04-19 3 views
7

Je me sens un peu bête de poser une question aussi simple, mais je n'arrive pas à trouver une réponse. Je suis nouveau à ASP.NET (C#), mais j'apprends en construisant un ensemble simple de pages Web qui affichent un rapport. J'ai une variable qui représente le nom d'une entreprise. J'ai besoin de sortir cette variable à plusieurs endroits sur la page web. La seule façon que je l'ai trouvé à la sortie d'une variable est avec:Réutiliser une variable plusieurs fois sur un ASP.NET Page

company_name.Text = "Acme Windows"; 

puis

<asp:literal id="company_name" runat="server" /> 

Mon problème est que je veux utiliser company_name à plusieurs endroits sur la page. Dois-je vraiment créer une variable séparée en conservant la même valeur chaque fois qu'elle est placée sur la page? Si je ne fais que copier le code XML ci-dessus dans tous les endroits où je veux montrer la variable, cela crée évidemment une erreur de compilation puisque cet identifiant est déjà défini. J'ai l'impression qu'il me manque quelque chose de très évident.

+0

C'est vraiment une bonne question. –

Répondre

11

La meilleure façon de le faire est de créer une variable de chaîne ou d'un bien dans votre classe code-behind et utiliser la notation <%= %> (abréviation de Response.Write) pour le rendre sur votre ligne de page:

// You can do this anywhere on your .aspx, as many times as you like. 
<%= this.CompanyName %> 

// Better yet, html encode the value to protect against various threats, 
// such as cross-site script injection (XSS) 
<%= HttpUtility.HtmlEncode(this.CompanyName) %> 

. NET 4.0 introduit une nouvelle notation de raccourci (Html Encoding Blocks) html-encoder votre sortie:

<%: this.CompanyName %> 

en ce qui concerne votre approche originale, AS Les contrôles Web P.NET comme Literal représentent des parties individuelles d'une page Web - vous ne pouvez pas les utiliser plusieurs fois sur une page car l'instance d'objet company_name fait référence à la partie spécifique du code HTML généré par le <asp:literal> dans votre page .aspx.

+4

Attention: ceci vous laisse ouvert aux bogues xss. Un contrôle d'étiquette désinfectera la sortie. ASP.Net 4 (est sorti la semaine dernière) a une nouvelle piqûre d'abeille '<%: %>' vous devriez presque toujours utiliser au lieu de '<%= %>' –

0

La réponse la plus simple est que vous devez définir plusieurs contrôles.

Mais une meilleure solution serait de le faire:

Créer une propriété sur le code derrière côté des choses:

protected CompanyName{get;set;} 

Ensuite, dans le côté ASPX des choses, référence au <% =%> commandes

<span><%=CompanyName %></span> 
+1

<% = vous laisse ouvert aux bogues xss. Si vous pouvez utiliser asp.net 4, <%: c'est mieux. –

3

dans ce cas, vous créez une propriété sur la page et de sortie en chaque endroit où vous en avez besoin.

public string CompanyName { get { return "Acme Windows"; } } 

Et dans le ASPX:

.NET 4.0:

<%:this.CompanyName%> 

Avant 4.0:

<%=this.companyName%> 
1

Vous pouvez ajouter dynamiquement le contrôle:

Literal myLiteral = new Literal(); 
myLiteral.text = "Acme Windows"; 
this.Page.Controls.Add(myLiteral); 

Vous pouvez également ajouter le contrôle dans un contrôle spécifique de la page, en changeant la référence de this.Page.Controls au contrôle particulier vous voulez ajouter le littéral à.

0

Pourquoi est-ce un wiki communautaire?

De toute façon, vous avez plusieurs possibilités pour réaliser ce que vous voulez. Placer plusieurs variables portant le même nom n'est certainement pas la meilleure pratique. Si vous l'avez rempli, appelons-le, valeur "semi-dynamique", je ne le mettrais pas en dur dans votre code. Ce que je ferais est d'utiliser un fichier de ressources global.

Vous créez un nouveau fichier de ressources dans le dossier App_GlobalResources et ajoutez une clé "COMPANY_NAME" avec la valeur "Acme Windows". Ensuite, dans votre code ASPX vous pouvez faire quelque chose comme

<asp:literal id="company_name" runat="server" Text="<%$ Resources:GlobalResources, Button_Save %>"/> 

J'ai écrit une blog post some time ago qui détaille cette approche. L'avantage du fichier de ressources est que vous n'avez pas besoin de toucher le code. Si vous voulez continuer à "refactoriser" - en supposant que vous ayez des informations générales sur la société à afficher sur différentes positions sur la page - vous pouvez créer un UserControl séparé qui contient les informations comme nom de l'entreprise, numéro de téléphone, contact info etc. Dans ce contrôle, vous avez votre littéral, étiquette, tout ce que vous utilisez pour afficher cette information exactement 1 fois. Ce UserControl est ensuite placé sur les lieux sur la page réelle où vous en avez besoin, même plusieurs fois.

Questions connexes