ASP.NET MVCかみそり連結


95

Razorビューエンジンを使用して、次のようなHTMLリストをレンダリングしようとしています。

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

このリストをレンダリングするために使用しようとしているコードは次のとおりです。

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

パーサーが窒息しているのは、id属性のアンダースコアの右側にあるものはすべてプレーンテキストであり、解析すべきではないと考えているためです。パーサーにTheItemIdをレンダリングするように指示する方法がわかりません。

私はしたくないのですが、item_接頭辞を含むモデルオブジェクトのプロパティです。

また、JQuery Sortableと、この構文でid属性をフォーマットする必要があるserialize関数でリストを使用しているため、この構文を維持する必要があります。

回答:


207

呼び出しの内部を次のようにラップする必要があります( )

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

3
私はString.Formatから始めましたが、あなたの応答の構文と簡潔さを好むので、私はそれを私の優先回答としてマークします。
David Marchelya、2011年

私はVisual Studio 2013とASP.NET MVC 5を使用していますが、これは機能しません(文字列はそのままで、かっこを含めて設定さ@ています)...私にとって最終的に機能したのは非常に不愉快なことid="foo" + Model.Barでした。
Ian Campbell

これにより、括弧内の変数が得られました。Razorは、アンダースコア+変数=文字列+変数であることを理解したようです。
Hugh Seagraves

26

String.Formatを使用するのはどうですか?このような:

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


ネストされた二重引用符のため、これは正しく解析されません...内側の引用符は一重引用符で、外側の二重引用符は次のようになりid="@String.Format('foo{0}', item.Bar)"ますか?
Ian Campbell

10

私は好む:

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

冗長性はサポートデベロッパーに何が起こっているかを正確に伝えるため、明確で理解しやすくなっています。


2

この方法を使用して、より多くの文字列連結することもできます

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

ここに別の投稿があります。

希望は誰かを助けます。



0

この投稿は古いようですが、現在は最新のMVCで機能します。

id="item_@item.TheItemId"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.