MVC3将dictionary<string,bool>从视图传递到控制器

3

我需要在表单上显示几个复选框,用户可以勾选他们想要的所有选项。

因此,我将复选框选项存储在数据库中。(必填)

模型

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 />                             
     } 

当我提交表单时,复选框在提交到控制器时会变成空值。你知道为什么吗?

抱歉,我不太明白:视图呈现正确,但是当您提交时,复选框的值丢失了? - Andre Calil
是的,我在视图上有3个复选框,这些复选框是由foreach循环创建的。因此,如果我选中其中两个框并将其提交到控制器,则在控制器上检查复选框变量时它为空(根本没有任何内容)。基本上,我希望控制器像这样获取它:checkboxs [Option1] = true,checkboxs [Option2] = false,checkboxs [Option3] = true。根据用户选择哪个复选框。我认为,这与我如何格式化HTML有关,因此我认为它与生成复选框的foreach循环有关。 - Valter
2个回答

1

使用编辑器模板

在您的ViewModel中添加一个属性。为了更好的可读性,我将从复数改为单数(Options变为Option

public class Option
{
    public int OptionId {get; set;}
    public string Option {get; set;}
    public bool IsSelected { set;get;}
}

还有你的主 ViewModel,

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

1

您的复选框将被赋予以下名称:checkboxs[key here]和以下ID:checkboxs_key_here_。MVC不知道如何将它们绑定回来。

请查看我几天前回答的这个主题:在循环语句中生成MVC3单选按钮列表

这是同样的事情,只是使用单选按钮而不是复选框。


1
单选按钮不允许多选。 - EricP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接