本次主要分享几个场景的处理代码,有更好处理方式多多交流,相互促进进步;代码由来主要是这几天使用前端Ace框架做后台管理系统,这Ace是H5框架里面的控件效果挺多的,做兼容也很好,有点遗憾是控件效果基本都是写一起的,分离起来挺麻烦的;这次主要说的是后端代码,以后可以分享下这个框架的使用。

 

以上是个人的看法,下面来正式分享今天的文章吧:

. 扩展HtmlHelper,枚举转化select下拉框效果

. 自定义ActionFilter,验证登陆和权限访问

. 扩展HtmlHelper,无限递归生成菜单栏

. Global中增加全局Application_Error监控404异常

. 实现及使用缓存工厂(最新缓存工厂代码在上一篇分享的缓存工厂之Redis缓存)

 

下面一步一个脚印的来分享:

. 扩展HtmlHelper,枚举转化select下拉框效果

枚举转化select下拉框效果,这个效果估计很多同学都遇到过,也一定有自己的想法与实践;因为这里是MVC框架,所以这里我直接扩展HtmlHelper,这样在页面使用起来也很方便;这里了解一下这样的场景,通常枚举在方法中传递都只能是定义好的某一个枚举,这样来生成select标签扩展性就不强;这个时候有朋友就想到如果使用enum来当做方法的参数呢,这样是不行的,enum不能直接用来当做方法参数(看官们可以试试),所以这样看就没法定义一个公共的参数来传递不同枚举了,当然万能的Type给了我们一点曙光,下面我们就使用Type当做参数来传递枚举;

首先,我们既然要扩展HtmlHelper,那必须遵循一定的规则:

1.定义扩展类的类名通常使用Extension结尾,这里咋们定义个名称为HtmlHelperExtension的扩展类

2.扩展方法参数中使用this HtmlHelper html作为第一个参数

3.扩展方法返回MvcHtmlString把内容输出到试图View中

再来,自定义方法如:public static MvcHtmlString DrpDownByEnum(this HtmlHelper html, Type ty, string name = "Status", bool isAll = true);第二个参数就是上面说到的Type,她针对说有类型不仅仅局限于枚举,因为这里说的是使用枚举所以这里的职责就是负责枚举类型的传入,第三个参数是每个html标签都应该具备的name属性值,第四个参数是是否增加全选的选项;下面再来分享下具体代码:

 1 /// <summary>
 2         /// 根据枚举获取DrpDownList
 3         /// </summary>
 4         /// <param name="ty"></param>
 5         /// <param name="name"></param>
 6         /// <param name="isAll"></param>
 7         /// <returns></returns>
 8         public static MvcHtmlString DrpDownByEnum(this HtmlHelper html, Type ty, string name = "Status", bool isAll = true)
 9         {
10             var sbHtml = new StringBuilder(string.Empty);
11             sbHtml.AppendFormat("<select class='form-control' name='{0}'>", name);
12             if (isAll)
13             {
14 
15                 sbHtml.AppendFormat("<option value='{0}'>{1}</option>",
16                                    "-1",
17                                    "==全部==");
18             }
19             var vals = Enum.GetValues(ty);
20             for (int i = 0; i < vals.Length; i++)
21             {
22                 var val = vals.GetValue(i);
23                 var text = Enum.Parse(ty, val.ToString()).ToString();
24                 sbHtml.AppendFormat("<option value='{0}'>{1}</option>",
25                    (int)val,
26                     text);
27             }
28             sbHtml.Append("</select>");
29             return MvcHtmlString.Create(sbHtml.ToString());
30         }
View Code

相关文章: