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

时间:2012-03-25 22:53:26

标签: asp.net-mvc asp.net-mvc-3 checkbox

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

text1
text2
text3
text4
text5

submitbutton

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

[HttpPost]
public ActionResult controller(List<string> list)
{
}

但是这不会选择所选项目的列表。你能告诉我我做错了什么或其他方式吗?

2 个答案:

答案 0 :(得分: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
}

在我的Get Action方法中,我将此ViewModel返回到我的视图

public ActionResult Edit()
{
  MyViewModel objVM=new MyViewModel();
  return View(objVM);
}

并在我的视图中

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

现在,您的帖子操作方法

中将提供此属性值
[HttpPost]
public ActionResult Edit(MyViewModel objVM)
{
 //Here you can access the properties of objVM and do whatever

}

答案 1 :(得分: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;}         
}
[HttpPost]
public ActionResult controller(MyModelViewModel model)
{
    foreach(var item in model.CheckBoxList)
    {
        if(item.Checked)
        {
            // do something with item.Text
        }
    }
}

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

补充参考:
Should ViewModels be used in every single View using MVC?