你的位置:首页 > 软件开发 > ASP.net > 爱上MVC~为DisplayNameFor添加扩展,支持PagedList集合

爱上MVC~为DisplayNameFor添加扩展,支持PagedList集合

发布时间:2015-10-27 00:00:15
回到目录DisplayNameFor方法是MVC提供给我们的,它可以将模型的DisplayName特性的值显示到页面上,这对程序员来说很是方便,在进行实体设计时,可以指定它的显示名称,然后MVC引擎会自动帮助我们生成DisplayNameFor代码断,而我们的所有字段的名称就显示 ...

回到目录

DisplayNameFor方法是MVC提供给我们的,它可以将模型的DisplayName特性的值显示到页面上,这对程序员来说很是方便,在进行实体设计时,可以指定它的显示名称,然后MVC引擎会自动帮助我们生成DisplayNameFor代码断,而我们的所有字段的名称就显示到了页面上,一切就这样简单,即使你在列表页,你的模型IEnumerable<T>也可以很容易的被支持,而在大叔框架里,分页列表使用了模型PagedList<T>,这当然不会被微软兼容,所以,大叔为些特意为DisplayNameFor这个方法写了一个扩展,让它支持大叔的分页,并且支持导航属性的DisplayName,例如,UserInfo.UserExtension.NickName,它就会把UserExtension类的NickName字段的描述信息显示出来!

代码属于扩展方法,所以要写在静态类中,呵呵

  /// <summary>  /// 大叔为DisplayName进行了扩展  /// </summary>  public static class DisplayNameExtensions  {    /// <summary>    /// 显示字段的名称DisplayName的值    /// </summary>    /// <typeparam name="TModel"></typeparam>    /// <typeparam name="TValue"></typeparam>    /// <param name="html"></param>    /// <param name="expression"></param>    /// <returns></returns>    public static MvcHtmlString DisplayNameFor<TModel, TValue>(this HtmlHelper<PagedList<TModel>> html, Expression<Func<TModel, TValue>> expression)    {      Type t = typeof(TModel);      // get='_blank'>string propertyName = GetPropertyName<TModel, TValue>(expression);      var complex = ExpressionHelper.GetExpressionText(expression).Split('.');      string propertyName = complex.Last();      if (complex.Count() > 1)      {        t = t.GetProperty(complex[complex.Length - 2]).PropertyType;      }      var p = t.GetProperty(propertyName);      if (p != null)      {        var attr1 = p.GetCustomAttribute(typeof(DisplayNameAttribute));        var attr2 = p.GetCustomAttribute(typeof(DisplayAttribute));        if (attr1 != null)        {          return MvcHtmlString.Create(((System.ComponentModel.DisplayNameAttribute)attr1).DisplayName);        }        if (attr2 != null)        {          return MvcHtmlString.Create(((DisplayAttribute)attr2).Name);        }      }      return MvcHtmlString.Create(string.Empty);    }    public static MvcHtmlString DisplayNameFor<TModel, TEnumerable, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, PagedList<TEnumerable>>> enumerableExpression, Expression<Func<TEnumerable, TValue>> valueExpression)    {      var metadata = ModelMetadata.FromLambdaExpression(valueExpression, new ViewDataDictionary<TEnumerable>());      string displayName = metadata.DisplayName ?? metadata.PropertyName ?? ExpressionHelper.GetExpressionText(valueExpression).Split('.').Last();      return new MvcHtmlString(HttpUtility.HtmlEncode(displayName));    }  }

原标题:爱上MVC~为DisplayNameFor添加扩展,支持PagedList集合

关键词:mvc

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