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属性以这种语法格式设置的序列化功能一起使用。

Answers:


208

您应该使用以下命令包装呼叫的内部( )

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

3
我从String.Format开始,但是更喜欢您的响应的语法和简洁性,我将其标记为我的首选答案。
David Marchelya,2011年

我使用的是Visual Studio 2013和ASP.NET MVC 5,这不起作用(字符串按原样设置,包括@和在内)...最终对我有用的是非常讨厌的id="foo" + Model.Bar
伊恩·坎贝尔

这给了我括号内的变量。看来Razor现在知道下划线+变量=字符串+变量。
休·希格雷夫斯

26

如何使用String.Format呢?像这样:

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


由于嵌套的双引号,因此无法正确解析...内部引号应该是单引号,外部引号应该是id="@String.Format('foo{0}', item.Bar)"吗?
伊恩·坎贝尔

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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.