MVC 扩展方法特点

时间:2023-01-01 22:49:07

.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. return from buddyProp in buddyClassProperties
      9. join modelProp in modelClassProperties on buddyProp.Name equals modelProp.Name
      10. from attribute in buddyProp.Attributes.OfType<ValidationAttribute>()
      11. where !attribute.IsValid(modelProp.GetValue(instance))
      12. select new ErrorInfo(buddyProp.Name, attribute.FormatErrorMessage(string.Empty), instance);
      13. }

MVC 扩展方法特点的更多相关文章

  1. ASP&period;NET MVC 扩展方法

    一.扩展方法的语法        在视图中使用扩展方法的时候 如果扩展方法定义的类在其他命名空间,需要首先引用该命名空间,才能使用该扩展方法        static class 静态类名      ...

  2. C&num; MVC扩展方法

    控制方法 : 在不修改类原来代码的情况下,给类扩展方法 https://www.cnblogs.com/jxsimon/articles/5043654.html https://www.cnblog ...

  3. MVC————扩展方法MvcHtmlString

    使用前: public static class MyHtmlHelper { public static string GroupPage(this HtmlHelper helper) { str ...

  4. ASP&period;NET MVC之持久化TempData及扩展方法(十三)

    前言 之前在开始该系列之前我们就讲述了在MVC中从控制器到视图传递数据的四种方式,但是还是存在一点问题,本节就这个问题进行讲述同时进行一些练习来看看MVC中的扩展方法. 话题 废话不必多说,我们直接进 ...

  5. ASP&period;Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

    一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...

  6. ASP&period;NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

  7. Asp&period;Net MVC 扩展 Html&period;ImageFor 方法详解

    背景: 在Asp.net MVC中定义模型的时候,DataType有DataType.ImageUrl这个类型,但htmlhelper却无法输出一个img,当用脚手架自动生成一些form或表格的时候, ...

  8. 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)

    回到目录 说在前 我都是喜欢把问题复杂化,还有总是喜欢把问题简单化,偷懒化,这也需就是一个程序员的追求吧,呵呵. 我不太喜欢重复的东西,当你看到页面上有一个以上相同的代码时,那可以说,你的代码有重构的 ...

  9. Asp&period;net MVC的Model Binder工作流程以及扩展方法&lpar;2&rpar; - Binder Attribute

    上篇文章中分析了Custom Binder的弊端: 由于Custom Binder是和具体的类型相关,比如指定类型A由我们的Custom Binder解析,那么导致系统运行中的所有Action的访问参 ...

随机推荐

  1. kindeditor-4&period;1&period;3工具使用技巧&colon;如何在编辑区上传图片并保存绝对路径

    MVC项目开中用到了KindEditor图片上传工具,需要在编辑区内上传图片,并将图片的URL保存为符合如下格式地址,如http://192.168.0.111/uploadImg/imgName.j ...

  2. Android 第一行代码

    ::-/stuapplication.pla.edu.cn.fragmentbestpractice W/dalvikvm﹕ VFY: unable to find class referenced ...

  3. python django 与数据库的交互

    下载没有任何问题的mysqdb http://www.codegood.com/archives/4 1创建一个新的app. python manage.py startapp books 2 激活a ...

  4. C&num;&lowbar;MVC&lowbar;分页update

    private static string getLinkHtml(UrlHelper urlHelper, bool useAjax, string ajaxSuccessFunction, str ...

  5. eval、json&period;parse&lpar;&rpar;的介绍和使用注意点

    原文:eval.json.parse()的介绍和使用注意点 eval和json.parse的使用 eval:来源于官网 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScri ...

  6. Python s12 Day1 笔记及作业

    作业一: 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 python3代码 : # -*- coding:utf-8 -*- input_name = input("Please ...

  7. ELK学习笔记(一)安装Elasticsearch、Kibana、Logstash和X-Pack

    最近在学习ELK的时候踩了不少的坑,特此写个笔记记录下学习过程. 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因 ...

  8. Servlet&lpar;7&rpar;—ServletConfig接口和SevletContext接口

    ServletConfig接口 1. 可以获取当前Servlet在web.xml中的配置信息(用的不多) 2. 在不使用"硬编码"的情况下,将部署状态信息传递给Servlet.这个 ...

  9. redis集群搭建及连接&lpar;阿里云&rpar;

    阿里云上面装redis集群基本被虐死,主要问题就是私有IP和公有IP. 下面分享成功搭建的步骤: 两台测试服务器,分别为:127.0.0.1,127.0.0.2.每分服务器有3个节点. 1.127.0 ...

  10. rails中常用的插件

    config.gem "acts-as-taggable-on", :version => '1.0.19' # tag类 config.gem "papercli ...