MVC 扩展方法特点

 .NET MVC 3中扩展方法特点:

    (1)扩展类的名称以Extensions结尾;

    (2)扩展类的类型是static;

    (3)扩展方法至少有一个参数,第一个参数必须指定该方法作用于哪个类型,并且该参数以this修饰符为前缀;

    (4)扩展方法的类型是static;

    (5)如果拓展方法的返回值是字符串则返回类型是MvcHtmlString,而不是string;

    (6)页面调用必须用using指令导入扩展类型所在的命名空间。

  1.  <label for="Address">Address:</label> 
  2.                 <%= Html.TextBox("user.Address")%>
  3.               <%= Html.ValidationMessage("user.Address")%> 
    1. var errors = DataAnnotationsValidationRunner.GetErrors(user);  
    2.             if (errors.Any())  
    3.             {  
    4.                 new RulesException(errors).AddModelStateErrors(ModelState,"user");  
    5.             }  
      1. public static IEnumerable<ErrorInfo> GetErrors(object instance)  
      2.         {  
      3. var metadataAttrib = instance.GetType().GetCustomAttributes(typeof(MetadataTypeAttribute), true)
      4. .OfType<MetadataTypeAttribute>().FirstOrDefault();  
      5.             var buddyClassOrModelClass = metadataAttrib != null ? metadataAttrib.MetadataClassType : instance.GetType();  
      6.             var buddyClassProperties = TypeDescriptor.GetProperties(buddyClassOrModelClass).Cast<PropertyDescriptor>();  
      7.             var modelClassProperties = TypeDescriptor.GetProperties(instance.GetType()).Cast<PropertyDescriptor>();  
      8.  
      9.             return from buddyProp in buddyClassProperties  
      10.                    join modelProp in modelClassProperties on buddyProp.Name equals modelProp.Name  
      11.                    from attribute in buddyProp.Attributes.OfType<ValidationAttribute>()  
      12.                    where !attribute.IsValid(modelProp.GetValue(instance))  
      13.                    select new ErrorInfo(buddyProp.Name, attribute.FormatErrorMessage(string.Empty), instance);  
      14.         }  
posted @ 2015-07-12 15:47  caijinhao  阅读(414)  评论(0编辑  收藏  举报