超文本标记语言BeginForm不向控制器返回值

本文关键字:控制器 返回值 BeginForm 超文本标记语言 | 更新日期: 2023-09-27 17:50:21

为什么这个返回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; }
}

超文本标记语言BeginForm不向控制器返回值

您需要为HTML Helper提供一个数字索引器(来自for循环)。如果你用foreach,你不会得到这个。这是因为你想要的HTML助手呈现形式foo[1].Value,以便模型解析器可以正确地转换post 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>
}