Eri*_*ick 12 c# asp.net asp.net-mvc .net-3.5 asp.net-mvc-2
我在这里寻找一种快速简便的方法来绑定模型中发生回发时的复选框列表项列表.
显然,现在这样做的常见方式似乎就是这样做form.GetValues("checkboxList")[0].Contains("true");
似乎很痛苦而且不完全安全.
有没有办法绑定复选框列表(在视图中使用或不使用帮助程序创建),或者甚至是在UpdateModel(myViewModel, form.ToValueProvider());
填充模型内部IList<string>
或string[]
内部的阶段中的数据数组?
你可以从一个模型开始:
public class MyViewModel
{
public int Id { get; set; }
public bool IsChecked { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后一个控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new[]
{
new MyViewModel { Id = 1, IsChecked = false },
new MyViewModel { Id = 2, IsChecked = true },
new MyViewModel { Id = 3, IsChecked = false },
};
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<MyViewModel> model)
{
// TODO: Handle the user selection here
...
}
}
Run Code Online (Sandbox Code Playgroud)
一个视图(~/Views/Home/Index.aspx
):
<% using (Html.BeginForm()) { %>
<%=Html.EditorForModel() %>
<input type="submit" value="OK" />
<% } %>
Run Code Online (Sandbox Code Playgroud)
最后是相应的编辑器模板:
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.MyViewModel>" %>
<%= Html.HiddenFor(x => x.Id) %>
<%= Html.CheckBoxFor(x => x.IsChecked) %>
Run Code Online (Sandbox Code Playgroud)
现在,当您在POST操作中提交表单时,您将获得所选值的列表及其ID.
这是快速简便的方法.只需value
在checkbox
输入元素中设置属性并为它们提供相同的属性即可name
.如果我是在一个站点上实现这一点,我将创建一个CheckBox
辅助方法需要name
,value
和isChecked
参数,但这里的视图只需要在html:
<% using (Html.BeginForm()) { %>
<p><input type="checkbox" name="checkboxList" value="Value A" /> Value A</p>
<p><input type="checkbox" name="checkboxList" value="Value B" /> Value B</p>
<p><input type="checkbox" name="checkboxList" value="Value C" /> Value C</p>
<p><input type="checkbox" name="checkboxList" value="Value D" /> Value D</p>
<p><input type="checkbox" name="checkboxList" value="Value E" /> Value E</p>
<p><input type="checkbox" name="checkboxList" value="Value F" /> Value F</p>
<input type="submit" value="OK" />
<% } %>
Run Code Online (Sandbox Code Playgroud)
在您的控制器中:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(IEnumerable<string> checkboxList)
{
if (checkboxList != null)
{
ViewData["Message"] = "You selected " + checkboxList.Aggregate("", (a, b) => a + " " + b);
}
else
{
ViewData["Message"] = "You didn't select anything.";
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
该IEnumerable<string>
参数(你可以把它IList<string>
如果你想)将包含已选中的项目只值.这将是null
,如果没有箱子进行检查.