我是MVC3的新手,我无法弄清楚如何在MVC中使用复选框。 我的视图中有一堆文字,如
text1
text2
text3
text4
text5
submitbutton
此文本与任何模型的纯文本无关。我想为每个项目添加一个复选框,并将其链接到控制器,以便当用户选择一些复选框值并单击提交按钮时,我的控制器会选择已选择的项目。 我尝试使用@html.checkbox(“text”+ index)并尝试将控制器设为
[HttpPost]
public ActionResult controller(List<string> list)
{
}
但是这不会选择所选项目的列表。你能告诉我我做错了什么或其他方式吗?
答案 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?