超文本标记语言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; }
}
您需要为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>
}