Asp.net MVC 视图(三)
Html辅助方法(HtmlHelper类)
可以通过视图的Html属性调用HTML辅助方法,也可以通过Url属性调用URL辅助方法,还可以通过Ajax属性调用Ajax辅助方法。
在控制器中也存在Url辅助方法。
所有输出模型值和特性值的辅助方法都会在渲染之前,对值进行HTML编码。例如:< 转义为 < 等。
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 <br /></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#属性名是无效的,但元素可以拥有带有连字符的属性名称,解决方案是使用下划线。
Asp.net MVC 视图(三)的更多相关文章
- ASP.NET MVC 视图(三)
ASP.NET MVC 视图(三) 前言 上篇对于Razor视图引擎和视图的类型做了大概的讲解,想必大家对视图的本身也有所了解,本篇将利用IoC框架对视图的实现进行依赖注入,在此过程过会让大家更了解的 ...
- ASP.NET MVC 视图(五)
ASP.NET MVC 视图(五) 前言 上篇讲解了视图中的分段概念.和分部视图的使用,本篇将会对Razor的基础语法简洁的说明一下,前面的很多篇幅中都有涉及到视图的调用,其中用了很多视图辅助器,也就 ...
- ASP.NET MVC 视图(四)
ASP.NET MVC 视图(四) 前言 上篇对于利用IoC框架对视图的实现进行依赖注入,最后还简单的介绍一下自定义的视图辅助器是怎么定义和使用的,对于Razor语法的细节和辅助器的使用下篇会说讲到, ...
- ASP.NET MVC 视图(一)
ASP.NET MVC 视图(一) 前言 从本篇开始就进入到了MVC中的视图部分,在前面的一些篇幅中或多或少的对视图和视图中的一些对象的运用进行了描述,不过毕竟不是视图篇幅说的不全面,本篇首先为大家讲 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- ASP.NET MVC 视图(二)
ASP.NET MVC 视图(二) 前言 上篇中对于视图引擎只是做了简单的演示,对于真正的理解视图引擎的工作过程可能还有点模糊,本篇将会对由MVC框架提供给我们的Razor视图引擎的整个执行过程做一个 ...
- ASP.NET MVC 路由(三)
ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...
- ASP.NET MVC 过滤器(三)
ASP.NET MVC 过滤器(三) 前言 本篇讲解行为过滤器的执行过程,过滤器实现.使用方式有AOP的意思,可以通过学习了解过滤器在框架中的执行过程从而获得一些AOP方面的知识(在顺序执行的过程中, ...
- 为ASP.NET MVC视图输出json
做个小小练习,为asp.net mvc视图输出json字符串: 创建JsonResult操作: 创建此视图: 浏览结果:
- Asp.net MVC 视图引擎
Asp.net MVC视图引擎有两种: 1.ASPX View Engine 这个做过WebForm的人都清楚 设计目标:一个用于呈现Web Form页面的输出的视图引擎. 2.Razor View ...
随机推荐
- Fragment的隐藏与显示
package com.bwie.helpdemo; import com.bwie.fragment.BillFrag; import com.bwie.fragment.IndexFrag; im ...
- 混合使用 ForkJoin, Akka, Future 实现一千万个不重复整数的排序
定位 本文适合于想要了解新语言 Scala 以及异步并发编程框架 Akka, Future 的筒鞋. 读完本文后,将了解如何使用 ForkJoin 框架.如何使用 Akka 构建并发程序.如何使用 ...
- HTML 5 的data-* 自定义属性
HTML 5 增加了一项新功能是 自定义数据属性 ,也就是 data-* 自定义属性.在HTML5中我们可以使用以 data- 为前缀来设置我们需要的自定义属性,来进行一些数据的存放.当然高级浏览器 ...
- 自定义分词器Analyzer
Analyzer,或者说文本分析的过程,实质上是将输入文本转化为文本特征向量的过程.这里所说的文本特征,可以是词或者是短语.它主要包括以下四个步骤: 1.分词,将文本解析为单词或短语 2.归一化,将文 ...
- 【转】Struts1.x系列教程(4):标签库概述与安装
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- 一段处理百分数的js代码
function percent(s, e, i){ s = Number(s), isNaN(s) && (s = "0"); var n = "%&q ...
- sql注入过滤的公共方法
/// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...
- 3D数学基础学习之向量一
向量-数学定义 对数学家而言,向量就是一个数字列表,对程序员而言则是另一种相似的概念,数组. 向量-几何定义 a.向量的大小就是向量的长度(模),向量的长度非负 b.向量的方向描述了空间中向量的指向. ...
- python协程与异步I/O
协程 首先要明确,线程和进程都是系统帮咱们开辟的,不管是thread还是process他内部都是调用的系统的API,而对于协程来说它和系统毫无关系; 协程不同于线程的是,线程是抢占式的调度,而协程是协 ...
- c++实现蛇形矩阵总结
蛇形矩阵,百度了一下,是这么一个东西: 像一条蛇一样依次递增. 我想,竟然做了螺旋矩阵,那做一下这个吧.在之前的螺旋矩阵的main函数基础上,写个函数接口就行了,这一次做的很快,但是这个矩阵感觉比螺旋 ...