我正在使用C#,MVC 3使用剃须刀 使用环绕的if语句时,列表在空格中为空。没有if,它工作正常。我需要的是从文本框中获取所有值的列表。
for (var i = 0; i < Model.Budget.BudgetRader.Count; i++)
{
if (Model.Budget.BudgetRader[i].Konto != -1) {
<tr>
<td>@Html.TextBoxFor(x => x.Budget.BudgetRader[i].BudgetBelopp)</td>
</tr>
}
}
答案 0 :(得分:2)
Phil Hack描述了它不起作用的原因。
索引集合需要0及以上的索引值增加1而不会跳过任何索引值。因此,当您使用if语句跳过某些行时,绑定不起作用。添加特定索引器i,如果您的行需要唯一,请添加隐藏字段ID或类似内容。请参阅下面的更新示例。
int i = 0;
foreach (var rad in Model.Budget.BudgetRader)
{
if (rad.Konto != -1)
{
<tr>
<td>@Html.HiddenFor(x => x.Budget.BudgetRader[i].Id)</td>
<td>@Html.TextBoxFor(x => x.Budget.BudgetRader[i++].BudgetBelopp)</td>
</tr>
}
else
{
//...
}
}
以下堆栈溢出也是很好的信息:https://stackoverflow.com/a/8896840/455904
答案 1 :(得分:1)
尝试为每个项目使用显式Index
值。这允许您在集合中包含非连续索引:
for (var i = 0; i < Model.Budget.BudgetRader.Count; i++)
{
if (Model.Budget.BudgetRader[i].Konto != -1) {
<tr>
<td>
<input type="hidden" name="Budget.BudgetRader.Index" value="@i" />
@Html.TextBoxFor(x => x.Budget.BudgetRader[i].BudgetBelopp)
</td>
</tr>
}
}
以下是类似的答案:https://stackoverflow.com/a/8598287/1373170
我不确定Budget.BudgetRader.Index
是否是正确的名称,因为它应该与您的收藏名称相同。如果您发布当前的html输出,我会在必要时进行更正。
答案 2 :(得分:1)
尝试做这样的事情:
for (var i = 0; i < Model.Budget.BudgetRader.Count; i++)
{
if (Model.Budget.BudgetRader[i].Konto != -1) {
<tr>
<td>@Html.TextBoxFor(x => x.Budget.BudgetRader[i].BudgetBelopp)</td>
</tr>
}
else
{
@Html.HiddenFor(x => x.Budget.BudgetRader[i].BudgetBelopp)
}
}