ASP.NET MVC Razor连接字符串

102

我正在尝试使用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可排序列表和需要id属性格式化为这个语法的serialize函数。

6个回答

218

你应该使用 ( ) 包裹调用的内部部分:

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

3
我最开始使用了String.Format,但我更喜欢你回答中的语法和简洁性,我将其标记为我偏爱的答案。 - David Marchelya
我正在使用Visual Studio 2013和ASP.NET MVC 5,但这并不起作用(字符串设定为“as is”,包括@和括号...)。最终对我有效的是非常粗糙的“id =”foo“+ Model.Bar”。 - Ian Campbell
这使我得到了括号中的变量。看起来 Razor 现在理解下划线 + 变量 = 字符串 + 变量。 - Hugh Seagraves

27

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

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


由于嵌套的双引号,这段代码无法正确解析...内部引号应该改为单引号,外部引号改为双引号,类似于id="@String.Format('foo{0}', item.Bar)" - Ian Campbell

12

我更喜欢:

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

详细度能够让支持开发人员明确了解正在发生的情况,因此这一点非常清晰易懂。


2
你甚至可以使用这种方法来连接更多的字符串:
<li id="@("item-"+item.Order + "item_"+item.ShopID)" class="ui-state-default"></li>

这里是另一篇文章。

希望能对某些人有所帮助。


0

你可以用更简单的方式实现这个:

id="item_@item.TheItemId"

0

这篇文章似乎比较旧,但现在在最新的MVC中已经可以使用了:

id="item_@item.TheItemId"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接