17

I have this code (nested inside a form post) but am continually getting the error that it's missing the closing }

@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"))>
} 

I've been staring at it long enough...can anyone help?

4

6 回答 6

18

Try put @: before your html code like this:

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

Alternatives: 1. wrap your html code with <text></text> 2. use HtmlHelper to generate the html code

于 2012-06-25T03:21:00.530 回答
3

您可能会注意到,要编写代码块,您可以通过两种方式编写

  1. For Only a line of Block ,就像您在代码中编写的那样,它仅包含包含前面 @ 的行
  2. 对于使用 @{... } 的代码块,这使您可以自由地使用不带 @ 前面的代码,除非在 HTML 表达式中。对于任何 html/文本,您必须在其前面加上 @:您要按原样打印,否则 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"))) />
    }
 } 
于 2015-06-18T04:32:23.767 回答
1

最简单的方法是使用 HTML Helpers。代码也会很干净(您的 Description 和 UnitPrice 的名称格式似乎遵循相同的格式;您可能想要更改它)

    @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"))           
    }
于 2012-06-25T03:49:35.417 回答
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"))) />
} 
于 2012-06-25T03:23:36.847 回答
0

尝试将您的 for 循环主体包含在文本标记之间。

http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax.aspx

于 2012-06-25T09:57:13.100 回答
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 的另一个更改/注释。

于 2012-06-25T03:48:27.197 回答