本文转自:http://www.cnblogs.com/myshell/archive/2010/05/09/1731269.html

在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明。有时候,我们不想重复地写一些HTML代码,或者MS没有提供我们想要的那个HTML标签的Html辅助方法,那么,我们就可以通过自己定义一个Html扩展方法来达到这个目的。

  比如,到目前为止,Html扩展方法中没有关于<input type="file" />这类标签的辅助方法,那么我们就可以自已实现一个。本文以实现<input type="file" />标签为例,演示如何实现自定义Html扩展方法。

  一、实现自定义弱类型Html扩展方法

  其实实现自定义Html扩展方法并不难,有兴趣的同学可以去看下MVC源代码,关于Html扩展方法部分。要用到System.Web.Mvc命名空间下的TagBuilder类,MvcHtmlString类。TagBuilder类为Html辅助方法生成HTML标签,MvcHtmlString代表HTML编码的字符串。扩展方法代码如下所示:

代码

publicstaticclass MyInputExtensions { publicstatic MvcHtmlString Input(this HtmlHelper htmlHelper, string name) { TagBuilder tagBuilder =new TagBuilder("input");//设置标签类型为input tagBuilder.Attributes.Add("type", "file");//为标签添加type属性及值 tagBuilder.Attributes.Add("name", name);//为标签添加name属性及值  tagBuilder.GenerateId(name);//为标签生成Id,name参数代码Id的值 //创建经过HTML加密的字符串 //TagRenderMode.SelfClosing枚举值代表当前标签是自动关闭的return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing)); } }

  需要特别提醒的是,扩展方法类所在的命名空间最好设置为System.Web.Mvc,这样,我们在View中可以通过智能感知轻易找到,也不容易出错或者无法通过VS智能感知找到我们自定义的Html辅助方法,可以为我们省去很多不必要的麻烦。将上面代码编译,我们即可在View中通过智能感知看到我们自定义的Html辅助方法。如下图所示:

  使用方法和其它Html辅助方法一样,如下代码所示:

<%: Html.Input("Path") %>//字符串参数Path代表生成标签的name属性和id属性的值

需要说明的是,本例所示是为了生成<input type="file">标签,是不用设置值的,读者可以通过自身情况定义扩展方法。然后运行,通过浏览器查看HTML源代码,如下图所示:

  二、实现自定义强类型Html辅助方法

  强类型辅助方法的一个好处是,我们可以通过编译器为我们检测一些错误,为我们节省一些排错的时间与精力。所以,强类型Html辅助方法是不可缺少的。代码如下:

代码

publicstaticclass MyInputExtensions { publicstatic MvcHtmlString Input<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression) { string modelName = ExpressionHelper.GetExpressionText(expression);//从Lambda表达式中获取模型对应属性的名称 TagBuilder tagBuilder =new TagBuilder("input");//设置标签类型为input tagBuilder.Attributes.Add("type", "file");//为标签添加type属性及值 tagBuilder.Attributes.Add("name", modelName);//为标签添加name属性及值 tagBuilder.GenerateId(modelName);//为标签生成Id,name参数代码Id的值 //创建经过HTML加密的字符串 //TagRenderMode.SelfClosing枚举值代表当前标签是自动关闭的return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.SelfClosing)); }
}

  然后我们编译,在View中,我们就可以通过智能感知看到我们新扩展的强类型Html辅助方法了。如下图所示:

  

  我们可以通过如下代码使用新扩展的Html辅助方法:

<%: Html.Input(model => model.Path) %>//Path代表model的Path属性,生成标签的name和id的属性值均会是Path

  运行,我们通过浏览器查看生成的Html源代码如下图所示:

  

  三、为标签错误输入添加CSS支持

  对于要求输入的标签,如Text,如果用户输入错误内容,我们可以为当前标签添加CSS错误提示,为用户提供一个更加友好、人性化的界面。代码如下所示:

代码

ModelState modelState; if (htmlHelper.ViewData.ModelState.TryGetValue(name, out modelState)) { if (modelState.Errors.Count >0) { //添加错误提示CSS tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName); }
}

  将以上代码复制到我们自定义的扩展方法的返回MvcHtmlString字符串之前即可。

  四、总结

  本文通过演示如果实现自定义<input type="file" />标签的Html辅助方法,展示了如何在ASP.NET MVC中实现自定义Html辅助方法。对于ASP.NET MVC程序员来说,这是非常实用的。

转载于:https://www.cnblogs.com/freeliver54/archive/2013/04/26/3044598.html

[转]自定义ASP.NET MVC Html辅助方法相关推荐

  1. 第四章 ASP.NET MVC HTML辅助方法生成表单标签具体用法

    (1.)使用HTML辅助方法在试图文件创建表单,参考代码如下: 代码中使用using语法将其包含,以确保form标签在using语句结尾时输出form标签,如果不适用using语句,则需要手动调用 @ ...

  2. asp.net+mvc+html辅助,ASP.NET MVC使用Ajax的辅助的解决方法

    前言:前面我们已经简单的介绍过了MVC如何Jquery,因为我们如果使用Ajax的话必须要了解Jquery,这篇博客我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法,此博客是我的读书 ...

  3. [转]自定义ASP.NET MVC JsonResult序列化结果

    本文转自:http://blog.163.com/luckcq@yeah/blog/static/17174770720121293437119/ 最近项目中前台页面使用EasyUI的jQuery插件 ...

  4. 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构

    先看一下我的解决方案的目录结构吧--- 一:先把Controller程序提取出来 默认的情况是所有的****Controller.cs文件都会放在Web程序集下的一个叫Controllers的文件夹下 ...

  5. 自定义ASP.NET MVC JsonResult序列化结果

    最近项目中前台页面使用EasyUI的jQuery插件开发中遇到,EasyUI Form中的Datebox组件绑定ASP.NET MVC返回的DateTime类型的数据错误,因为ASP.NET MVC返 ...

  6. mvc html 辅助方法,MVC HTML辅助类常用方法记录

    (1)@Html.DisplayNameFor(model => model.Title)是显示列名, (3)@Html.ActionLink("Create New", & ...

  7. asp.net mvc 上传到服务器 图片不显示,asp.net MVC上传图片完整方法

    图片上传 自动创建文件夹并重命名(带缩略图) 后台: [HttpPost] public ActionResult WanSell_UploadPicture(ProductGalleryModels ...

  8. Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)

    前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...

  9. ASP.NET MVC 框架

    ASP.NET MVC 框架 [原文地址]ASP.NET MVC Framework [原文发表日期] Sunday, October 14, 2007 10:41 PM 过去的几年里,很多人要求AS ...

最新文章

  1. 笑傲江湖霍建华版电子相册
  2. 吴恩达深度学习课程deeplearning.ai课程作业:Class 4 Week 2 Keras - Tutorial - Happy House
  3. SpringFox 3.0.0(包含springfox-swagger2-3.0.0)——无法访问/swagger-ui.html解决方案
  4. 硬肝!超详细的Python文件操作知识
  5. kaggle用命令提交
  6. 什么意思中文翻译_os常见意思介绍
  7. Python中几个操作列表的内置函数filter(),map(),reduce(),lambda
  8. django model对象修改_从0到1搭建个人博客-Django(三)
  9. 协议圣经 五 rtsp client
  10. 用Scala实现简单的Web和API服务器
  11. 数据结构上机实践第14周项目1(2) - 验证算法(分块查找)
  12. Android-Universal-Image-Loader学习笔记(二)--LruDiscCache
  13. Codeforces Round #704 (Div. 2) D - Genius‘s Gambit 思维+构造
  14. 计算机二级python刷题软件排行榜_计算机二级office刷题软件求推荐?
  15. 计算机体检作用,QQ电脑管家什么是电脑体检?有什么作用?
  16. Docker hub配置国内加速器
  17. 玉堂金阙百度云php100,玉堂金阙(全二册)
  18. 0724 静态购物网页
  19. java面试题总结及答案,使用/教程/实例
  20. H5怎么禁用长按复制的功能?

热门文章

  1. R语言心得-分词包的安装
  2. LeetCode Merge k Sorted Lists 解决报告
  3. proxool配置多数据库多连接池
  4. 【转】程序员健康建议
  5. 一个监测IIS,并定时重新启动的程序。
  6. Android按比例布局之layout_weight和weightSum的使用
  7. android handler 的removeMessages的使用
  8. android requestFocus的使用
  9. android 非法字符 \ufeff错误
  10. OpenCV isContinuous()连续存储的问题