MVC3 - 如何正确使用@html.checkbox?

use*_*616 4 checkbox asp.net-mvc asp.net-mvc-3

我是MVC3的新手,我无法弄清楚如何在MVC中使用复选框.在我看来,我有一堆文字

text1
text2
text3
text4
text5

submitbutton
Run Code Online (Sandbox Code Playgroud)

此文本与任何模型的纯文本无关.我想为每个项目添加一个复选框,并将其链接到控制器,以便当用户选择一些复选框值并单击提交按钮时,我的控制器会选择已选择的项目.我尝试使用@html.checkbox("text"+ index)并尝试使用控制器

[HttpPost]
public ActionResult controller(List<string> list)
{
}
Run Code Online (Sandbox Code Playgroud)

但是,这并没有获取所选项目的列表.你能告诉我我做错了什么或其他方式吗?

Shy*_*yju 8

在这种情况下我要做的是使这些项目成为我的ViewModel的属性.

public class MyViewModel
{
  public bool text1  { set;get}
  public bool text2 { set;get;}
  public bool SomeMeaningFullName { set;get;}
  // Other properties for the view
}
Run Code Online (Sandbox Code Playgroud)

在我的Get Action方法中,我将把这个ViewModel返回给我的View

public ActionResult Edit()
{
  MyViewModel objVM=new MyViewModel();
  return View(objVM);
}
Run Code Online (Sandbox Code Playgroud)

在我看来

@model MyViewModel

@using (Html.BeginForm("Edit","yourcontroller"))
{
  @Html.LabelFor(Model.text1)
  @Html.CheckBoxFor(Model.text1)
  @Html.LabelFor(Model.text2)
  @Html.CheckBoxFor(Model.text2)

  <input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)

现在,此属性值将在您的post action方法中可用

[HttpPost]
public ActionResult Edit(MyViewModel objVM)
{
 //Here you can access the properties of objVM and do whatever

}
Run Code Online (Sandbox Code Playgroud)


Cha*_*ell 6

使用所有值创建ViewModel.填充ViewModel并将其发送到视图.检查某些内容后,您就会知道帖子上的内容.

public class MyModelViewModel
{
    public List<CheckBoxes> CheckBoxList {get; set;} 
    // etc
}

public class CheckBoxes
{
    public string Text {get; set;} 
    public bool Checked {get; set;}         
}
Run Code Online (Sandbox Code Playgroud)
[HttpPost]
public ActionResult controller(MyModelViewModel model)
{
    foreach(var item in model.CheckBoxList)
    {
        if(item.Checked)
        {
            // do something with item.Text
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上ViewModels是你的朋友.您希望每个View都有一个单独的ViewModel,它是在Controller和View之间来回传递的.然后,您可以在控制器中或(最好)在服务层中进行数据解析.

附加参考:
ViewModel应该在每个使用MVC的View中使用吗?