【发布时间】:2014-09-22 23:16:48
【问题描述】:
我正在运行一个 MVC5 站点并尝试将其从使用单选按钮切换到复选框。我已经阅读了该站点上的许多其他示例,但似乎无法使其正常工作。我当前的 ViewModel 将作为 NULL 发布到控制器。这是它目前的样子:
public class ViewModel {
public string SelectedLeader { get;set;}
public IEnumerable<Personnel> Team { get;set; }
}
public class Personnel : TableEntity {
... other attributes here
public bool IsLead {get;set;}
}
SelectedLeader 用于跟踪 RadioButton 的 Selected 元素的 RowKey,因此我想我可以将其切换为 IEnumerable,但与其他示例相比仍然看起来不正确。我的 HTML 如下所示:
@using (Html.BeginForm())
{
other stuff on page
@foreach (var person in Model.Team) {
... print other stuff
@Html.CheckboxFor( e => person.IsLead , new { value=@person.RowKey })
@Html.HiddenFor(e => person.RowKey)
}
}
public ActionResult Edit(ViewModel viewModel) {
...
}
当它回发到服务器时,Team 实际上返回为 null(与 SelectedLeader 相同,但不使用该 ATM)。我认为我设置 CheckboxFor 的方式可能有问题,但它确实正确设置了其初始设置。
有什么想法吗?谢谢。
史蒂夫
【问题讨论】:
-
这是一个众所周知的问题。基本上你需要在标记中使用
for而不是foreach,这样你的助手看起来像这样:@Html.HiddenFor(m => m[i].RowKey)。请注意,这里 lambda 的右侧取决于 lambda 的左侧。剃须刀应该是这样,其他方式通常表明标记有问题 -
啊,很高兴知道 - 真的很感激这个建议。明天早上会尝试改变!嗯,不知道怎么给你声望。
标签: c# asp.net checkboxfor