MVC Razor循环语句

18

我有这段代码(嵌套在表单提交中),但一直出现错误提示缺少结束符 }

@for(int i=0;i< itemsCount; i++){
    <input type="hidden" @string.Format("name= item_name_{0} value= {1}",i,items[i].Description) >
    <input type="hidden" @string.Format("name= item_name_{0} value= {1}",i,items[i].UnitPrice.ToString("c"))>
} 

我已经盯着这个问题看了很久……有人可以帮忙吗?


2
我认为这段代码没有问题。在我的机器上没有显示任何错误。也许你的代码中有额外的 { 符号。 - gideon
6个回答

18

尝试在您的html代码前加上@:,像这样:

 @for(int i=0;i< itemsCount; i++)
 {
    @: html code here
 } 

替代方案: 1. 用<text></text>将您的HTML代码包装起来。 2. 使用HtmlHelper生成HTML代码。


3
您可能已经注意到,编写代码块有两种方式:
  1. 对于只有一行的代码块,可以像您在代码中编写的那样,这只包含包含前面@符号的行。
  2. 使用@{...}编写代码块,这使您可以在HTML表达式中使用除前导@之外的代码。对于任何html/text,您必须在其前面加上@:如果要按原样打印,则Razor将尝试将其解释为代码(由于@:为每个@:下的代码表达式定义内容为文字,您必须再次使用@进行代码)

在您的情况下,您可以按照以下方式操作

@{
    for(int i=0; i < itemsCount; i++)
    {
       @:<input type="hidden" @Html.Raw(string.Format("name= item_name_{0} value=  {1}",i,items[i].Description)) />
       @:<input type="hidden" @Html.Raw(@string.Format("name= item_name_{0} value= {1}",i,items[i].UnitPrice.ToString("c"))) />
    }
 } 

1
最简单的方法是利用HTML Helpers。代码也会很干净(您的描述和单价名称格式似乎遵循相同的格式;您可能需要更改它)。
    @for (int i = 0; i < itemsCount; i++)
    {
        @Html.Hidden(string.Concat("ïtem_name_", i), items[i].Description)
        @Html.Hidden(string.Concat("ïtem_name_", i), items[i].UnitPrice.ToString("c"))           
    }

0

或者您可以使用Html.Raw助手

@for(int i=0; i < itemsCount; i++)
{
    <input type="hidden" @Html.Raw(string.Format("name= item_name_{0} value= {1}",i,items[i].Description)) />
    <input type="hidden" @Html.Raw(@string.Format("name= item_name_{0} value= {1}",i,items[i].UnitPrice.ToString("c"))) />
} 

0

尝试:

@for (int i = 0; i < itemsCount; i++) {
    <input type="hidden" name="@("item_name_" + i)" value="@items[i].Description" />
    <input type="hidden" name="@("item_name_" + i)" value="@(items[i].UnitPrice.ToString("c"))" />
}

请注意Prashanth的另一个中的更改/注释。


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