Html辅助方法(HtmlHelper类)

可以通过视图的Html属性调用HTML辅助方法,也可以通过Url属性调用URL辅助方法,还可以通过Ajax属性调用Ajax辅助方法。

在控制器中也存在Url辅助方法。

所有输出模型值和特性值的辅助方法都会在渲染之前,对值进行HTML编码。例如:< 转义为 &lt; 等。

Html辅助方法的工作原理

每个Razor视图都继承了基类的Html属性,Html属性的类型是System.Web.Mvc.HtmlHelper<T>,T代表传递给视图的模型类型(默认dynamic)。Html属性提供了一些可以在视图中调用的实例方法,更多的实际上是扩展方法(ASP.NET MVC所有的HtmlHelper扩展方法都是在System.Web.Mvc.Html(在Views/web.config里引入)这个命名空间中定义)。

常用的Html辅助方法

1、Html.BeginForm

示例: @using(Html.BeginForm("Search","Home",FormMethod.Get))

{

<input type="text" name="querystring"/>

<input type="submit" value="Search"/>

}

在服务端,BeginForm辅助方法与路由引擎协调工作生成合适的URL,从而当应用程序部署位置发生变化时,依然可以链接到正确地址。

注意:BeginForm辅助方法调用期间生成一个起始标签<form>,并返回一个实现了接口IDisposable的对象。当视图中的代码执行到结束using语句的花括号位置时,隐式调用Dipose方法生成一个结束标签</form>。

2、Html.ValidationSummary

3、Html.TextBox和Html.TextArea

示例:@Html.TextBox("Title",Model.Title)

@Html.TextArea("text","hello <br/> world",10,80,null);

结果:<input id="Title" name="Title" type="text" value="Model的Title值"/>

<textarea id="text" name="text" rows="10" cols="80">hello &lt;br /&gt;</textarea>

4、Html.Label

示例:@Html.Label("GenreId")

结果:<label for="GenreId"></label>

5、Html.DropDownList和Html.ListBox

DropDownList和ListBox辅助方法都返回一个<select/>元素,区别在于DropDownList允许单项选择,ListBox支持多项选择(将multiple特性值设置为multiple)

注意事项:在控制器中需要提供select元素的数据源

示例: public ActionResult Edit(int id)

{

var album=storeDB.Albums.Single(a=>a.AlbumId==id);

ViewBag.Genres=new SelectList(storeDB.Genres.OrderBy(g=>g.Name),"GenreId","Name",album.GenreId);

return View(album);

}

SelectList构造函数的参数指定了原始集合(数据库中的Genres表),作为value值传递给后台的属性GenreId,作为text显示文本的属性Name以及当前所选项的值album.GenreId

为了避免反射开销,也可以将上面代码的红色部分改为

ViewBag.Genres=storeDB.Genres.OrderBy(g=>g.Name).AsEnumerable()

.Select(g=>new SelectListItem{

Text=g.Name,

Value=g.GenreId.ToString(),

Selected=album.GenreId==g.GenreId

});

6、Html.ValidationMessage

示例:@Html.ValidationMessage("Title","Title中有敏感词");

结果:<span class="field-validation-error" data-valmsg-for="Title" data-valmsg-replace="false">Title中有敏感词</span>

只有当键值“Title”在模型状态中出现错误时才显示。

注意:必须先在控制器中将Title属性添加到模型状态中,即:

[HttpPost]

public ActionResult Edit(int id,FormCollection collection)

{

var album=storeDB.Albums.Find(id);

ModelState.AddModelError("Title","Title中必须含有数字");

return View(album);

}

这里"Title中必须含有数字"将被"Title中有敏感词"重写。

7、Html.Hidden

示例:@Html.Hidden("usercode","admin")

结果:<input id="usercode" name="usercode" type="hidden" value="admin"/>

8、Html.Password

示例:@Html.Password("LoginPassword")

结果:<input id="LoginPasssword" name="LoginPassword" type="password"  value=""/>

9、Html.RadioButton

示例:@Html.RadioButton("color","red")

@Html.RadioButton("color","blue",true)

@Html.RadioButton("color","green")

结果:

<input id="color" name="color" type="radio" value="red"/>

<input id="color" name="color" type="radio" value="blue" checked="checked"/>

<input id="color" name="color" type="radio" value="green"/>

10、Html.CheckBox

CheckBox辅助方法是唯一一个渲染出两个元素的辅助方法

示例:@Html.CheckBox("IsEnabled")

结果:<input id="IsEnabled" name="IsEnabled" type="checkbox" value="true"/>

<input id="IsEnabled" type="hidden" value="false"/>

HTML规范中规定浏览器只提交“选中”的复选框的值,隐藏元素保证了即便用户没有选择这个复选框,IsEnabled也有值(false)被提交。

11、Html.ActionLink

ActionLink辅助方法在后台使用路由API来生成URL

示例:@Html.ActionLink("Link Text","Edit","StoreManager",new{id=12},null)

结果:<a href="/StoreManager/Edit/12">LinkText</a>

12、Html.RouteLink

ActionLink辅助方法接收控制器名称和操作名称不同,RouteLink辅助方法接收路由名称

13、Url.Action

Action辅助方法生成字符串而非Html标签

示例:@Url.Action("Browse","Store",new {genre="Jazz"},null)

结果:/Store/Browse?genre=Jazz

14、Url.RouteUrl

RouteUrl辅助方法接收路由名称,不接收控制器名称和操作名称

15、Url.Content

Content辅助方法可以把应用程序的相对路径转换成绝对路径

16、Ajax.ActionLink

注意:需要导入jquery.js和unobtrusiveAjax.js

视图中创建ajax超链接按钮(通常用于请求分部视图)

示例:@Ajax.ActionLink("超链接","Action名",new AjaxOptions(){UpdateTargetId="html标签Id",InsertionMode=InsertionMode.Replace,HttpMethod="Post"})

后台Controller代码:

public PartialViewResult Action名()

{

return PartialView("");

}

17、Ajax.BeginForm

注意:需要导入jquery.js和unobtrusiveAjax.js

视图中创建异步表单

示例:@using(Ajax.BeginForm("Action名","Controller名",new AjaxOptions(){UpdateTargetId="html标签Id",InsertionMode=InsertionMode.Replace,HttpMethod="Post",OnSuccess="success的js方法名",OnFailure="fail的js方法名",LoadingElementId="html标签Id"})){}

后台Controller代码:

public PartialViewResult Action名(int id)

{

return PartialView("");

}

辅助方法的重载
示例:@using(Html.BeginForm("Search","Home",FormMethod.Get,new{target="_blank",@class="editForm",data_validatable=true}))
结果:<form action="/Home/Search" class="editForm" data-validatable="true" method="get" target="_blank"/>
说明:1、向BeginForm辅助方法的htmlAttributes参数传递了一个匿名类型的对象(也可以是IDictionary<string,object>类型的字典)从而创建元素的特性。
        2、设置元素的class特性要求匿名类型对象必须拥有class属性(如果是字典,就是要求拥有一个class键),class是C#语言的一个保留关键字,不能用作属性名称或标识符,解决方案是使用@符号。
        3、带有连字符的C#属性名是无效的,但元素可以拥有带有连字符的属性名称,解决方案是使用下划线。

最新文章

  1. Cheatsheet: 2016 03.01 ~ 03.31
  2. ios 中 documents和library 的区别
  3. 核心动画和UIView动画的区别
  4. 简单SQL分页
  5. Scala入门
  6. cocos2d-x,求世界坐标
  7. OpenShare新功能@2014年11月 [2014-11-30]
  8. 关于着色器LinearGradient的使用
  9. bayer图像格式
  10. RSA加密解密与签名验证
  11. stl function扩展(一)
  12. js 动态 key value
  13. Android OpenGL ES 开发(八): OpenGL ES 着色器语言GLSL
  14. Xdoclet + Ant自动生成Hibernate配置文件
  15. 安装mitmproxy
  16. cookie是如何保存到客户端,又是如何发送到服务端
  17. 18 包 ,logging模块使用
  18. go语言之行--网络编程、http处理流程详情
  19. vb 导出excel生成图表统计
  20. el表达式 多条件判断

热门文章

  1. [转]网络诊断工具:MTR
  2. 前端开发面试题JS2
  3. MVC5 + EF6 完整入门教程三
  4. [windows][C++][库]遍历删除文件夹
  5. [Scrapy] Mac安装Scrapy
  6. VS2013: upgrading a Windows Phone 7/8 and Windows 8 apps(转)
  7. src url href uri的区别和联系
  8. 后勤数据抽取流程图 Logistic Data Extraction
  9. 让下拉框中同时显示Key与Value
  10. win7 windows server 2008R2下 https SSL证书安装的搭配(搭配https ssl本地测试环境)