为什么这会向控制器返回null?复选框项目正在显示,但是当我选择要保存的项目时,控制器操作中的项目为空。
在视图中
@model List<SearchOptionsViewModel>
@using (Html.BeginForm("Save","Query", FormMethod.Post))
{
@Html.AntiForgeryToken()
<li id="li_15">
<div>
<p class="padding" />
@foreach (var item in Model)
{
<div>
@Html.CheckBoxFor(x => item.Selected)
@Html.HiddenFor(x => item.Value)
@Html.DisplayFor(x => item.Text)
</div>
}
</div>
</li>
<p>
<input type="submit" value="Save" />
</p>
}
行动
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(List<SearchOptionsViewModel> param)
{
foreach (var item in param)
{
// Do stuff
}
}
查看模型
public class SearchOptionsViewModel
{
public string Text { get; set; }
public string Value { get; set; }
public bool Selected { get; set; }
}
答案 0 :(得分:4)
您需要提供一个数字索引器(从for
循环)到HTML Helper。如果您使用foreach
,则无法获得该信息。这是因为您希望HTML Helpers以foo[1].Value
的形式呈现,以便Model Parser可以将POSTed HTML表单字段值正确转换为强类型集合(这是您的ViewModel):
@for( int i = 0; i < this.Model.Count; i++ )
{
<div>
@Html.CheckBoxFor( m => m[i].Selected)
@Html.HiddenFor( m => m[i].Value)
@Html.DisplayFor( m => m[i].Text)
</div>
}