.NETMVC3使⽤CheckBoxList(复选框列表)的简单⽅法
html实现用户注册登录代码MVC3中并没有提供CheckBox List的实现,刚开始⽤起来感觉很不⽅便,最初想到的是做HTMLHelpper的⼀些扩展,但是那样⽤起来感觉不是⼗分⽅便,并且需要在C#代码⾥⾯写HTML Style等⼀些东西。其实,直接在View⾥⾯加⼀个循环就可以使⽤。
假如我做⼀个⽤户添加功能,⽤户可能属于不同的⾓⾊:
我定义Model的是 AddUserModel,⾥⾯有⼀个属性Roles⽤来存放⾓⾊:
[Display(Name = "所属⾓⾊")]
public IEnumerable<SelectListItem> Roles { get; set; }
在Controller⾥⾯这样写:
public ActionResult AddUser()
{
AddUserModel model = new AddUserModel();
InitMenu(model, AddUserModel.ITEM_ADD_USER);
var roles = new[]
{
new SelectListItem { Value = "1", Text="⾓⾊1", Selected = false },
new SelectListItem { Value = "2", Text="⾓⾊2",Selected = true },
new SelectListItem { Value = "3", Text="⾓⾊3",Selected = false },
};
model.Roles = roles;
return View(model);
}
[HttpPost]
public ActionResult AddUser(AddUserModel model, string[] roles)
{
InitMenu(model, AddUserModel.ITEM_ADD_USER);
return View(model);
}
视图⾥⾯这样写:
<div class="editor-label">
@Html.LabelFor(m => m.Roles)
</div>
<div class="editor-field">
@foreach (SelectListItem item in Model.Roles)
{
var ischecked = "";
if (item.Selected)
{
ischecked = "checked='checked'";
}
<input name="roles" type="checkbox" value="@item.Value" @ischecked />
@item.Text
}
</div>
这样就可以实现⼀个CheckBox List了,通过修改视图代码可以⾃由定义样式。Controller⾥⾯接收到的数据是这个样⼦:
现在有⼀个问题就是每次在View⾥⾯使⽤CheckBox List的时候代码有点点多,可以把现实代码放在⼀个Template⾥⾯,⽐如Template的名字为CheckBoxList.cshtml:
Template 的代码:
View Code
@model IEnumerable<SelectListItem>
@foreach (SelectListItem item in Model)
{
var ischecked = "";
if (item.Selected)
{
ischecked = "checked='checked'";
}
<input name="@ViewData["ListName"]" type="checkbox" value="@item.Value" @ischecked />    @item.Text
}
视图⾥⾯的调⽤代码:
<div class="editor-field">
@Html.DisplayFor(m => m.Roles, "CheckBoxList", new {ListName="Roles"}) </div>
这样⽤起来就⽐较⽅便了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。