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.