web-dev-qa-db-fra.com

Concaténation de rasoir ASP.NET MVC

J'essaie de restituer une liste HTML semblable au suivant, à l'aide du moteur de vue Razor:

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

Le code que je tente d'utiliser pour rendre cette liste est le suivant:

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

L'analyseur est en train de s'étouffer, car il pense que tout ce qui se trouve à droite du trait de soulignement de l'attribut id est en texte brut et ne doit pas être analysé. Je ne suis pas sûr de savoir comment demander à l'analyseur de rendre TheItemId.

Je ne veux pas, mais une propriété sur l'objet de 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.

88
David Marchelya

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

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

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

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

25
Filip Ekberg

Je préfère:

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

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

9
Gary Woodfine

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

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

Ici est un autre post.

Hope aide quelqu'un.

2
stom