你的位置:首页 > 软件开发 > ASP.net > 扩展RadioButtonListFor和CheckBoxListFor

扩展RadioButtonListFor和CheckBoxListFor

发布时间:2015-06-06 00:07:19
在我们做正常的MVC的开发中,一些基本的控件已经够用了,但是有时候我们需要用到库里面没有的一些控件,比如RadioButtonListFor和CheckBoxListFor这类的列表控件,在MVC库里面没提供,需要自己来扩展一下。我们通过MvcHtmlString扩展的控件,最终 ...

         在我们做正常的MVC的开发中,一些基本的控件已经够用了,但是有时候我们需要用到库里面没有的一些控件,比如RadioButtonListFor和CheckBoxListFor这类的列表控件,在MVC库里面没提供,需要自己来扩展一下。我们通过MvcHtmlString扩展的控件,最终还是被转换为html标签的形式,所以扩展控件实质上还是拼标签。其中用到TagBuilder这个类,是get='_blank'>mvc自带的生成标签字符窜的类,大家没事的时候搜一下看看具体用法。还有selectListItem这个类,主要包含键值属性和是否选中的属性 。以下代码只是根据个人思路来做的,仅供参考。

         

using System;using System.Collections.Generic;using System.Linq;using System.Linq.Expressions;using System.Web;using System.Web.Routing;using System.Web.UI;namespace System.Web.Mvc.Html{  public static class HtmlExtension  {/// <summary>    /// 扩展radiobutton 列表    /// </summary>    /// <typeparam name="TModel">实体</typeparam>    /// <typeparam name="TValue">属性</typeparam>    /// <param name="helper"></param>    /// <param name="expression">表达式</param>    /// <param name="items">数据列表</param>    /// <param name="column">每行显示个数</param>    /// <param name="attributes">html属性</param>    /// <returns></returns>    public static MvcHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, int column = 0, object attributes = null)    {      string raidobuttonStr = "";      BuildListTag(out raidobuttonStr, "radio", items, expression, column, attributes);      return MvcHtmlString.Create(raidobuttonStr);    }    /// <summary>    /// 扩展radiobutton 列表    /// </summary>    /// <typeparam name="TModel">实体</typeparam>    /// <typeparam name="TValue">属性</typeparam>    /// <param name="helper"></param>    /// <param name="expression">表达式</param>    /// <param name="viewDataName">viewData数据列表名称</param>    /// <param name="column">每行显示个数</param>    /// <param name="attributes">属性</param>    /// <returns></returns>    public static MvcHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, int column = 0, object attributes = null)    {      string raidobuttonStr = "";      var items = helper.ViewData[viewDataName] as List<SelectListItem>;      BuildListTag(out raidobuttonStr, "radio", items, expression, column, attributes);      return MvcHtmlString.Create(raidobuttonStr);    }    /// <summary>    /// 扩展radiobutton 列表    /// </summary>    /// <typeparam name="TModel">实体</typeparam>    /// <typeparam name="TValue">属性</typeparam>    /// <param name="helper"></param>    /// <param name="expression">表达式</param>    /// <param name="items">数据列表</param>    /// <param name="column">每行显示个数</param>    /// <param name="attributes">html属性</param>    /// <returns></returns>    public static MvcHtmlString CheckBoxListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, int column = 0, object attributes = null)    {      string raidobuttonStr = "";      BuildListTag(out raidobuttonStr, "checkbox", items, expression, column, attributes);      return MvcHtmlString.Create(raidobuttonStr);    }    /// <summary>    /// 扩展radiobutton 列表    /// </summary>    /// <typeparam name="TModel">实体</typeparam>    /// <typeparam name="TValue">属性</typeparam>    /// <param name="helper"></param>    /// <param name="expression">表达式</param>    /// <param name="viewDataName">viewData数据列表名称</param>    /// <param name="column">每行显示个数</param>    /// <param name="attributes">属性</param>    /// <returns></returns>    public static MvcHtmlString CheckBoxListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, int column = 0, object attributes = null)    {      string raidobuttonStr = "";      var items = helper.ViewData[viewDataName] as List<SelectListItem>;      BuildListTag(out raidobuttonStr, "checkbox", items, expression, column, attributes);      return MvcHtmlString.Create(raidobuttonStr);    }    /// <summary>    /// 构造radioList或者checkBoxList标签    /// </summary>    /// <typeparam name="TModel"></typeparam>    /// <typeparam name="TValue"></typeparam>    /// <param name="raidobuttonStr">拼接的字符窜</param>    /// <param name="tag">标签(checkbox or radio)</param>    /// <param name="expression">表达式</param>    /// <param name="items">数据列表</param>    /// <param name="column">每行显示个数</param>    /// <param name="attributes">属性</param>    private static void BuildListTag<TModel, TValue>(out string raidobuttonStr, string tag, IEnumerable<SelectListItem> items, Expression<Func<TModel, TValue>> expression, int column = 0, object attributes = null)    {      raidobuttonStr = "";      if (items != null && items.Any())      {        int count = 1;        ///获取表达式属性名称        var name = (expression.Body as MemberExpression).Member.Name;        foreach (var item in items)        {          TagBuilder raidobutton = new TagBuilder("input");          raidobutton.Attributes.Add("type", tag);          raidobutton.Attributes.Add("name", name);          raidobutton.Attributes.Add("value", item.Value);          if (item.Selected)          {            raidobutton.Attributes.Add("checked", "checked");          }          if (attributes != null)          {            raidobutton.MergeAttributes(new RouteValueDictionary(attributes));          }          raidobuttonStr += raidobutton.ToString(TagRenderMode.SelfClosing);          raidobuttonStr += item.Text;          raidobuttonStr += "&nbsp;&nbsp;&nbsp;";          if (column == 1)          {            raidobuttonStr += "<br/>";          }          ///根据每行显示个数设置换行          else          {            if (count == column && column != 0)            {              raidobuttonStr += "<br/>";            }          }          count++;        }      }    }  }}

原标题:扩展RadioButtonListFor和CheckBoxListFor

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录