102 votes

ASP.NET MVC Concaténation du rasoir

J'essaie de rendre une liste HTML qui ressemble à ce qui suit, en utilisant le moteur de vue Razor :

<ul>
  <li id="item_1">Item 1</li>
  <li id="item_2">Item 2</li>
</ul>

Le code que j'essaie d'utiliser pour rendre cette liste est le suivant :

<ul>
@foreach (var item in Model.TheItems)
{            
  <li id="item_@item.TheItemId">Item @item.TheItemId</li>
}
</ul>

L'analyseur syntaxique s'étrangle, car il pense que tout ce qui se trouve à droite du trait de soulignement dans l'attribut id est du texte brut et ne doit pas être analysé. Je ne sais pas comment demander à l'analyseur syntaxique de rendre TheItemId.

Je ne veux pas mais une propriété sur l'objet modèle qui inclut le préfixe item_.

Je dois également conserver cette syntaxe car j'utilise la liste avec JQuery Sortable et avec la fonction serialize qui exige que l'attribut id soit formaté dans cette syntaxe.

215voto

Matthew Abbott Points 32861

Vous devez envelopper la partie interne de l'appel avec la fonction ( ) :

<li id="item_@(item.TheItemId)">

3 votes

J'ai commencé par String.Format mais je préfère la syntaxe et la brièveté de votre réponse, je la marque comme ma réponse préférée.

0 votes

J'utilise Visual Studio 2013 et ASP.NET MVC 5, et cela ne fonctionne pas (la chaîne de caractères est configurée en l'état y compris le @ et les parenthèses)... Ce qui a finalement fonctionné pour moi, c'est le très peu gracieux id="foo" + Model.Bar .

0 votes

Cela m'a donné la variable entre parenthèses. Il semble que Razor comprenne maintenant qu'un trait de soulignement + une variable = une chaîne de caractères + une variable.

27voto

Filip Ekberg Points 22189

Que diriez-vous d'utiliser String.Format ? comme ça :

<li id="@String.Format("item_{0}", item.TheItemId)">

0 votes

L'analyse syntaxique n'est pas correcte, en raison de l'imbrication des guillemets... les guillemets intérieurs doivent-ils être simples et les guillemets extérieurs doubles ? id="@String.Format('foo{0}', item.Bar)" ?

11voto

Gary Woodfine Points 49

Je préfère :

<li id="@String.Concat("item_", item.TheItemId)">

La verbosité indique aux développeurs de l'assistance technique ce qui se passe exactement, ce qui est clair et facile à comprendre.

2voto

stom Points 2477

Vous pouvez même utiliser cette méthode pour concaténer plusieurs chaînes de caractères :

<li id="@("item-"+item.Order + "item_"+item.ShopID)" class="ui-state-default"></li>

Ici est un autre poste.

J'espère que cela aidera quelqu'un.

1voto

anil shrestha Points 504

Vous pouvez le faire d'une manière plus simple :

id="item_@item.TheItemId"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X