zoukankan      html  css  js  c++  java
  • .NET MVC3使用CheckBox List(复选框列表)的简单方法

    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>

     这样用起来就比较方便了。

  • 相关阅读:
    各类Http请求状态(status)及其含义 速查列表 xmlhttp status
    Microsoft Visual Studio 2010 正式版下载[含旗舰版序列号](中、英文版)
    【分享】开源或免费的ASP.NET web应用列表
    线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
    Asp.Net中多语言的实现
    Oracle 数字与空值的排序问题
    新版微软一站式示例代码库 6月2日更新下载。
    .NET反射机制简介
    Decimal与double类型误差
    用动态菜单增强.NET应用程序
  • 原文地址:https://www.cnblogs.com/idlewater/p/2277814.html
Copyright © 2011-2022 走看看