2011-01-16 10 views
78

J'essaie le rendu d'une liste HTML qui ressemble à ce qui suit, en utilisant le moteur de vue Razor:ASP.NET MVC Razor Enchaînement

<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 :

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

l'analyseur est étouffait, car il pense que que tout à la droite du trait de soulignement dans l'attribut id est le texte brut et ne doit pas être analysée. Je ne suis pas sûr de la façon d'instruire l'analyseur pour 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 sérialiser qui nécessite le formatage de l'attribut id dans cette syntaxe.

Répondre

158

Vous devriez envelopper la partie intérieure de l'appel avec ():

<li id="[email protected](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. –

+1

Juste a traversé quelques vues partielles d'un collègue et nettoyé tous les String.Formats avec ce petit tour de rasoir. Un +1 le plus mérité! –

+0

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

25

Comment utiliser String.Format? comme ceci:

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

+0

String.Format a fait l'affaire, merci! Il vous manque juste le {0} après item_ dans votre réponse. –

+0

Ops .. :) Désolé combat ça, changé. –

+0

Ce n'est pas l'analyse correcte, en raison de doubles guillemets imbriqués ... si les guillemets intérieurs sont des guillemets simples et les doubles guillemets externes, quelque chose comme 'id =" @ String.Format ('foo {0}', item .Bar) "'? –

7

Je préfère:

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

Le verbosité dit aux développeurs de soutien exactement ce qui est passe, donc c'est clair et facile à comprendre.

0

Vous pouvez même utiliser cette façon de concat plusieurs chaînes:

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

Here est un autre poste.

L'espoir aide quelqu'un.