我们如何声明局部变量并输出其值?

时间:2012-06-13 16:32:18

标签: asp.net-mvc asp.net-mvc-3

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

@{ 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++;
 }

但它不起作用。

任何解决方案?

3 个答案:

答案 0 :(得分:3)

您还没有解释什么不起作用,但是从您的代码中可以看出“i”变量的值没有递增,而是输出“0 ++;”。

这是因为剃刀中@符号的用途是

  1. 输出
  2. 标识符,因此它输出标识符“i”,然后继续使用“++;”的剩余文本。
  3. 要实现您显然想要做的事情(只增加i的值),您必须将其包含在代码块中,如下所示:

    @{ i++; }
    

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

    @(i++)
    

答案 1 :(得分: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`)
    ...
}

答案 2 :(得分: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++;
    }
}