MVC3 将字典 <string,bool> 从视图传递到控制器
Posted
技术标签:
【中文标题】MVC3 将字典 <string,bool> 从视图传递到控制器【英文标题】:MVC3 Passing dictionary<string,bool> from view to controller 【发布时间】:2012-08-09 03:26:28 【问题描述】:我需要在表单上显示几个复选框,用户可以随意检查。
所以我将复选框选项存储在数据库中。 (必填)
型号
public class Options
public int OptionsId get; set;
public string Option get; set;
在视图模型上,
IEnumerable<Options> listCheckBoxOptions get; set;// store list of options from database
Dictionary<string,bool> checkboxs get; set; // store if is check or not
因此,在视图中,我想将复选框值(真/假)存储在此复选框字典中。
@foreach (var x in Model.listCheckBoxOptions)
@html.CheckBoxFor(m => m.checkboxs[x.Option])
@m.Option <br />
所以当我提交表单时...到达控制器时复选框为空。
知道为什么吗?
【问题讨论】:
对不起,我无法理解:视图显示正确,但是当您发布它时,您丢失了复选框值? 是的,我在 foreach 循环创建的视图上有 3 个复选框。因此,如果我选中两个框并发布到控制器。当我检查控制器上的复选框变量时,它为空。(根本没有)基本上我希望控制器像这样获得它 checkboxs[Option1] = true, checkboxs[Option2] = false , checkboxs[Option3] = true。取决于用户检查的复选框。我相信,它与我如何格式化 html 有关,所以我认为它与为复选框生成 html 的 foreach 循环有关。 【参考方案1】:您的复选框将被命名为checkboxs[key here]
,ID 为checkboxs_key_here_
。 MVC 不知道如何将这些绑定回来。
看看我几天前回答的这个帖子:Generating an MVC3 RadioButton list in a loop statement
同样的事情,只是使用 RadioButtons 而不是 CheckBoxes。
【讨论】:
单选按钮不允许多选。【参考方案2】:使用编辑器模板
向您的 ViewModel 添加一个属性。为了更好的可读性,我将把名称从复数改为单数(Options 改为 Option)
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>();
在Views/YourControllerName
文件夹下创建一个名为Option.cshtml
的视图。
里面有这个内容。
@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
操作中,您可以检查OptionList
属性中项目的IsSelected
属性值
[HttpPost]
public ActionResult Edit(CustomerViewModel model)
foreach(var opt in model.OptionList)
//check for model.IsSelected value for each item
【讨论】:
以上是关于MVC3 将字典 <string,bool> 从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章
参数类型“void Function(Map<String, bool>)”不能分配给参数类型“Map<String, bool>”