我已声明了一个像这样的变量
@{ 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++;
}
但它不起作用。
任何解决方案?
答案 0 :(得分:3)
您还没有解释什么不起作用,但是从您的代码中可以看出“i”变量的值没有递增,而是输出“0 ++;”。
这是因为剃刀中@符号的用途是
要实现您显然想要做的事情(只增加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++;
}
}