Concaténation de rasoir ASP.NET MVC


95

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:

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

L'analyseur est en train d'étouffer, 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 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 de sérialisation qui nécessite que l'attribut id soit formaté dans cette syntaxe.

Réponses:


208

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

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

3
J'ai commencé avec 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.
David Marchelya

J'utilise Visual Studio 2013 et ASP.NET MVC 5, et cela ne fonctionne pas (la chaîne est définie telle@ quelle , y compris le et les parenthèses) ... Ce qui a finalement fonctionné pour moi était le très ingrat id="foo" + Model.Bar.
Ian Campbell

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

26

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

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


Ce n'est pas une analyse correcte, en raison de doubles guillemets imbriqués ... les guillemets intérieurs doivent-ils être des guillemets simples et les guillemets doubles externes, quelque chose comme id="@String.Format('foo{0}', item.Bar)"?
Ian Campbell

10

Je préfère:

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

La verbosité indique aux développeurs de support exactement ce qui se passe, donc c'est clair et facile à comprendre.


2

Vous pouvez même utiliser cette méthode pour concater plus de chaînes :

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

Voici un autre article.

L'espoir aide quelqu'un.


1

Vous pouvez ainsi procéder de manière plus simple:

id="item_@item.TheItemId"

0

Cet article semble être plus ancien, mais cela fonctionne maintenant dans le dernier MVC:

id="item_@item.TheItemId"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.