【发布时间】:2015-05-21 04:24:32
【问题描述】:
为什么这会返回 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; }
}
【问题讨论】:
-
您的操作与控制器中的内容不匹配 @using (Html.BeginForm("Save","ControllerName", FormMethod.Post))
-
在表格中你提到
actionname为Search在控制器中你的actionname是Save.. 怎么会?? -
打错字了,抱歉。
-
因为您需要使用
for循环或自定义EditorTemplatefor typeofSearchOptionsViewModel,而不是foreach循环。详情请参考this answer -
我建议 2 件事来帮助您解决此问题,您可以单独或一起做。 (1) 使用 fiddler 并查看 Form Post 的正文以查看正在传递的内容。 (2) 将 (HttpPost) Save Action 的参数切换到 FormCollection 并调查发送到服务器的内容。 -- 我的猜测是生成的表单控件上的名称属性是问题
标签: c# razor asp.net-mvc-5