3

我需要在表单上显示几个复选框,用户可以根据需要检查任意数量。

所以我将复选框选项存储在数据库中。(必需的)

模型

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

所以当我提交表单时......当到达控制器时复选框为空。

知道为什么吗?

4

2 回答 2

1

您的复选框将被赋予这样的名称和像这样checkboxs[key here]的 ID checkboxs_key_here_。MVC 不知道如何将这些绑定回来。

看看我几天前回答的这个线程:Generating an MVC3 RadioButton list in a loop statement

同样的事情,只是使用 RadioButtons 而不是 CheckBoxes。

于 2012-08-09T03:42:57.423 回答
1

使用编辑器模板

向您的 ViewModel 添加一个属性。为了更好的可读性,我将把名称从复数改为单数(OptionsOption

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
   }
}
于 2012-08-09T04:00:24.453 回答