HtmlHelper类

public class HtmlHelper<TModel> : HtmlHelper类

因为HtmlHelper<TModel>继承自HtmlHelper,所以HtmlHelper<TModel>的对象,两者的扩展方法都可以使用.

在View页面中使用的Html,是 public abstract class WebViewPage<TModel> : WebViewPage中的一个属性,类型是HtmlHelper<TModel>.可以使用所有的这些扩展的方法

HtmlHelper<TModel> :对HtmlHelper的继承,主要是通过通过ViewDataDictionary<TModel>对ViewDataDictionary的继承实现的.

ViewDataDictionary<TModel>中对Model属性进行了重写覆盖隐藏,以达到泛型的目的.主要是处理Model的类型

  1. public class ViewDataDictionary<TModel> : ViewDataDictionary
  2. {
  3.  
  4. public ViewDataDictionary()
  5.  
  6. :
  7.  
  8. base(default(TModel))
  9. {
  10.  
  11. }
  12.  
  13. public ViewDataDictionary(TModel model)
  14.  
  15. :
  16.  
  17. base(model)
  18. {
  19.  
  20. }
  21.  
  22. public ViewDataDictionary(ViewDataDictionary viewDataDictionary)
  23.  
  24. :
  25.  
  26. base(viewDataDictionary)
  27. {
  28.  
  29. }
  30.  
  31. public new TModel Model
  32. {
  33.  
  34. get { return (TModel)base.Model; }
  35.  
  36. set { SetModel(value); }
  37.  
  38. }
  39.  
  40. public override ModelMetadata ModelMetadata
  41. {
  42.  
  43. get
  44. {
  45.  
  46. ModelMetadata result = base.ModelMetadata;
  47.  
  48. if (result == null) {
  49.  
  50. result = base.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel));
  51.  
  52. }
  53.  
  54. return result;
  55.  
  56. }
  57.  
  58. set { base.ModelMetadata = value; }
  59.  
  60. }
  61.  
  62. protected override void SetModel(object value)
  63. {
  64.  
  65. bool castWillSucceed = TypeHelpers.IsCompatibleObject<TModel>(value);
  66.  
  67. if (castWillSucceed) {
  68.  
  69. base.SetModel((TModel)value);
  70.  
  71. } else {
  72.  
  73. InvalidOperationException exception = (value != null)
  74.  
  75. ? Error.ViewDataDictionary_WrongTModelType(value.GetType(), typeof(TModel))
  76.  
  77. : Error.ViewDataDictionary_ModelCannotBeNull(typeof(TModel));
  78.  
  79. throw exception;
  80.  
  81. }
  82.  
  83. }
  84.  
  85. }

HtmlHelper<T>.Edit 泛型方法的第一个参数已经通过对象的类型指定了,不能是别的类型,必须和Helper的实例泛型类型相同

HtmlHelper<T>.EditFor 泛型方法可以根据参数推断出泛型类型.

HtmlHelper<T>.EditForModel Html对象有Model的相关信息,所以可以根据元数据信息生成页面代码.

HtmlHelper的更多相关文章

  1. mvc4 自定义HtmlHelper

    好久没写博客了,最近只看博客不写的习惯很不好啊. 好了,最近的项目中大量的用到了表单,很多表单有特殊的编写,但是在该项目中又有很多重复的地方,这个时候若能封装成htmlhelper将大大降低工作量的. ...

  2. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper(三:附源码)

    前言:之前的两篇封装了一些基础的表单组件,这篇继续来封装几个基于bootstrap的其他组件.和上篇不同的是,这篇的有几个组件需要某些js文件的支持. 本文原创地址:http://www.cnblog ...

  3. C#进阶系列——一步一步封装自己的HtmlHelper组件:BootstrapHelper

    前言:之前学习过很多的Bootstrap组件,博主就在脑海里构思:是否可以封装一套自己Bootstrap组件库呢.再加上看到MVC的Razor语法里面直接通过后台方法输出前端控件的方式,于是打算仿照H ...

  4. Mvc HtmlHelper 方法扩展 DropDownListFor

      项目中遇到表单提交中遇到枚举,忽然想起1年前的1小段代码结合HtmlHelper在扩展一下 便于开发中使用 public static class HtmlHelperExtensions { p ...

  5. 在mvc里面有htmlhelper方法,在webform里面有什么?

    终于是找到原来在webform里面已经提供了htmlcontrol这样的控件,可以直接拿来用.以前一直在想mvc有htmlhelper,webform里面不能用,其实是webform里面已经有了. 例 ...

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

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

  7. ASP.NET MVC 之自定义HtmlHelper

    前言 HtmlHelper方法为我们提供很多html标签,只需在页面调用就行了,但是微软并没有把所有的html标签都对应有了扩展方法,需要我们重新自定义HtmlHelper,来满足我们需要. 方法 如 ...

  8. ASP.NET MVC HtmlHelper之Html.ActionLink

    前言 ActionLink用于生成超链接,方法用于指向Controller的Action. 扩展方法与参数说明 ActionLink扩展方法如下: public static MvcHtmlStrin ...

  9. HtmlHelper拓展实现CheckBoxList

    经过一番折腾(主要是SelectList这个类操作有些繁琐)实现了CheckBoxList,过程RadioList基本一样 拓展方法 public static MvcHtmlString Check ...

  10. HtmlHelper拓展实现RadioList

    mvc中HtmlHelper可以帮助我们生成许多Html控件,但是没有类似DropDownList的RadioList,但是发现这些方法都是拓展方法,于是就想自己也拓展一个RadioList 从网上下 ...

随机推荐

  1. LNMP系列网站零基础开发记录(二)

    [目录] 扯淡吹逼之开发前奏 Django 开发环境搭建及配置 web 页面开发 Django app开发 Django 站点管理 Python 简易爬虫开发 Nginx&uWSGI 服务器配 ...

  2. IE9兼容性视图与IE9标准视图

    如果你使用的是IE9,那么按下F12键就会出现开发者工具,上面有两个下拉菜单:浏览器模式和文档模式.那么什么是浏览器模式?什么又是文档模式?二者有何区别? 浏览器模式用于切换IE针对该网页的默认文档模 ...

  3. 农行网银软件导致XP死机

    一台PC电脑安装了XP系统,突然会大约30分钟左右死机,键盘(CTRL+ALT+DEL)和鼠标都没反应,只能强行关机后重新开机.因为是用了几年的电脑,担心热稳定性问题,打开机箱后,发现CPU风扇很多灰 ...

  4. 《JavaScript高级程序设计》第4章 变量、作用域和内存问题

    4.1 基本类型和引用类型 5种基本类型:Undefined.Null.Boolean.Number和String,这5种基本类型是按值访问的,因为可以操作保存在变量中的实际的值. 引用类型:可能由多 ...

  5. 【转】Basic C# OOP Concept

    This Article will explain a very simple way to understand the basic C# OOP Concept Download ShanuBas ...

  6. [百度空间] [原]CImageList支持32位透明位图

    32位的位图主要是包含Alpha值(0-255)可以有半透效果的.之前用FreeImage加载 的DIB, CImageList直接绘制会有黑色背景.即便用了ILC_MASK,也创建了mask map ...

  7. Using Hooks

    The following code examples demonstrate how to perform the following tasks associated with hooks: In ...

  8. 关于面向对象--oop

    这两天在做大数据方面的项目看到关于job作业调度的设计,扣了两天了,感触良多,记下来做个反省. 这是一个精简版的图,其中还有一些没有划到,其实到这里目前对我来说已经足够了. 看完图之后进行分析,我只抛 ...

  9. 微信连WiFi关注公众号流程更新 解决ios微信扫描二维码不关注就能上网的问题

    前几天鼓捣了一下微信连WiFi功能,设置还蛮简单的,但ytkah发现如果是ios版微信扫描微信连WiFi生成的二维码不用关注公众号就可以直接上网了,而安卓版需要关注公众号才能上网,这样就少了很多ios ...

  10. Mac中安装maven3.2.1

    Mac中安装maven3.2.1 原文链接:http://blog.csdn.net/f_zongjian/article/details/24144803 本机OS X:10.9,未安装XCode, ...