我需要在表单上显示一些复选框,用户可以根据需要查看。
所以我在Database上存储了复选框选项。 (所需的)
模型
public class Options
{
public int OptionsId {get; set;}
public string Option {get; set;}
}
在viewModel上,
IEnumerable<Options> listCheckBoxOptions {get; set;}// store list of options from database
Dictionary<string,bool> checkboxs {get; set;} // store if is check or not
因此,在视图中,我想在此复选框字典中存储复选框值(true / false)。
@foreach (var x in Model.listCheckBoxOptions)
{
@Html.CheckBoxFor(m => m.checkboxs[x.Option])
@m.Option <br />
}
所以当我提交表单时...当到达控制器时,复选框为空。
知道为什么吗?
答案 0 :(得分:1)
您的复选框的名称将显示为此checkboxs[key here]
,而ID则会显示为此checkboxs_key_here_
。 MVC不知道如何绑定它们。
看看我几天前回答的这个帖子:Generating an MVC3 RadioButton list in a loop statement
同样的事情,只使用RadioButtons而不是CheckBoxes。
答案 1 :(得分:1)
使用编辑器模板
向ViewModel添加一个属性。为了更好的可读性,我将名称从复数更改为单数(选项到选项)
public class Option
{
public int OptionId {get; set;}
public string Option {get; set;}
public bool IsSelected { set;get;}
}
您的主视图模型,
public class CustomerViewModel
{
public IEnumerable<Option> OptionList { set;get;}
public CustomerViewModel()
{
OptionList=new List<Option>();
}
}
在Option.cshtml
文件夹下创建一个名为Views/YourControllerName
的视图。
将此内容包含在内。
@model Option
@{
Layout = null;
}
<p>
@Html.CheckBoxFor(x => x.IsSelected)
@Html.LabelFor(x => x.IsSelected, Model.Option)
@Html.HiddenFor(x => x.OptionId)
</p>
在主表单中,将其称为
@model YourViewModel
@using(Html.BeginForm())
{
@Html.EditorFor(m=>m.OptionList)
<input type="submit" value="Save" />
}
现在,在您的POST
操作中,您可以检查IsSelected
属性中项目的OptionList
属性值
[HttpPost]
public ActionResult Edit(CustomerViewModel model)
{
foreach(var opt in model.OptionList)
{
//check for model.IsSelected value for each item
}
}