6

我已经声明了一个这样的变量

@{ int i = 1; }

现在,在foreach循环内部,我想在每次处理循环时分配 i 的值;

 @foreach (var line in Model.Cart.Lines)
 {
      <input type="hidden" name="item_name_@i" value="@line.Product.ProductName" />
      <input type="hidden" name="amount_@i" value="@line.Product.Price" />
      <input type="hidden" name="quantity_@i" value="@line.Quantity" />
      @i++;
 }

但它不起作用。

有什么解决办法吗?

4

3 回答 3

3

您还没有解释什么不起作用,但是从您的代码看来,“i”变量的值没有增加,而是您检查了“0++;”的输出。

这是因为 razor 中 @ 符号的目的是

  1. 输出
  2. 标识符,因此它输出标识符“i”,然后继续剩余文本“++;”。

为了实现您显然想要做的事情(仅增加 i 的值),您必须将其包含在代码块中,如下所示:

@{ i++; }

但是,如果您确实想在增加 i 之前输出它的值,那么您应该将它包装在一个表达式块中,如下所示:

@(i++)
于 2013-06-20T14:28:00.717 回答
2

如果您需要访问索引,则使用普通for循环更有意义:

@for (int i = 0; i < Model.Cart.Lines.Count; i++)
{
    var line = Model.Cart.Lines[i];
    ...
}

或者,您可以使用 LINQ 表达式:

@foreach (var item in Model.Cart.Lines.Select((x, i) => new { Line = x, Index = i }))
{
    // Now you can access, for example, `item.Line` for the line, and 
    // `item.Index` for the index (i.e. `i`)
    ...
}
于 2012-06-13T16:39:47.453 回答
0

我在考虑范围。请参阅http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvc3razor.aspx

尝试一个代码块,例如:

@{
    var i = 1;
    var tmp = "";

    foreach (var line in Model.Cart.Lines)
    {
        tmp = "item_name_" + i;
        <input type="hidden" name="@tmp" value="@line.Product.ProductName" />
        i++;
    }
}
于 2013-08-15T04:05:51.383 回答