Html.BeginForm没有返回控制器的值

时间:2015-05-21 04:24:32

标签: c# razor asp.net-mvc-5

为什么这会向控制器返回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; }
}

1 个答案:

答案 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>
}