第5章 表单和HTML辅助方法(HtmlHelper、辅助方法的使用、HTML辅助方法的工作原理、强类型辅助方法)
2017-10-31 14:40
471 查看
一、表单的使用
1、表单
<form action="http://www.bing.com/search" monthod="get"> <input name="q" type="text"/> <input type="submit" value="Search!"/> </form>产出地址:http://www.bing.com/search?q=love
2、get方法还是Post方法
在Web应用程序中,Get请求用于读操作,Post请求用于写操作(通常包括更新、创建、删除)二、HTML辅助方法
每一个Razor [ˈrezɚ] 视图都继承了它们基类的Html属性。Html属性的类型是System.Web.Mvc.HtmlHelper<T>,这里的T是一个泛型类型参数,代表传递视图的模型类型(默认是dynamic)
ASP.NET MVC 所有的HtmlHelper扩展方法都在名称空间System.Web.Mvc.Html中(在web.Config)
@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { target="_blank",@class="editForm",data_validatable=true})) { <input type="text" name="q"/> <input type="submit" value="Search"/> }
生成后Html
<form action="/Home/Search" class="editForm" data-validatable="True" method="get" target="_blank"> <input type="text" name="q"/> <input type="submit" value="Search"/> </form>
1、自动编码
许多辅助方法都可以用来输出模型值。所有这些输出模型值的辅助方法都会在渲染之前,对值进行HTML编码(避免XSS工具)。如:TextArea辅助方法,输出HTML,就进行编码
@Html.TextArea("text","Hello <br/> World")产生标记
<textarea cols="20" id="text" name="text" rows="2"> Hello <br/> World</textarea>
2、辅助方法的使用
BeginForm辅助方法的另一个重载版本:@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { target="_blank",@class="editForm",data_validatable=true})) {}生成后Html
<form action="/Home/Search" class="editForm" data-validatable="True" method="get" target="_blank"></form>
(1)、其中new { target="_blank",@class="editForm",data_validatable=true}是htmlAttributes参数,它的类型是IDictionary<string, object>,辅助方法利用字典条目(对象的属性名称和属性值)创建辅助方法生成元素的特性。
(2)、class属性前加@,是应为class是c#语言中的一个保留关键字。
(3)、属性名中带下划线生成html代码后转成连字符(第8章介绍框架的Ajax特性时,将看到带连字符的属性名)
3、HTML辅助方法的工作原理
每一个Razor视图都继承了它们基类的Html属性。Html属性的类型是System.Web.Mvc.HtmlHelper<T>,这里的T是一个泛型类型的参数,代表传递给视图的模型类型(默认是dynamic)。这个属性提供了一些可以在视图中调用的实例方法,比如:EnableClientValidation 开启关闭客户端验证.4、设置专辑编辑表单
@using(Html.BeginForm()) { @Html.ValidationSummary(excludePropertyErrors:true) <input type="submit" value="Save"/> }Html.BeginForm() 向当前URL发送一个HTTP POST请求。
ValidationSummary辅助方法用来显示ModelState字典中所有验证错误的无序列表(验证摘要)。
如果值为true,只显示ModelState中与模型本身有关的错误。如:ModelState.AddModelError("Title","标题不能为空") 与Title属性关联的错误
如果值为false,只显示ModelState中与模型本身有关的错误。如:ModelState.AddModelError("","标题不能为空")
5、添加输入元素
StoreManager Edit.cshtml视图代码的表单部分,并突出显示了输入辅助方法:(1)、Html.TextBox和Html.TextArea
(2)、Html.Label
(3)、Html.DropDownList和Html.ListBox
(4)、Html.ValidationSummary
控制器中添加ModelState.AddModelError("Title","错误");
视图中添加@Html.ValidationSummary("Title")
6、辅助方法、模型和视图数据
辅助方法提供了对HTML细粒度控制的同时带走了构建UI的乏味工作。如:Html.TextBox和Html.DropDownList检查ViewData对象以获得要显示的值(在ViewBag对象中的所有的值也可以通过ViewData得到)
情况一:
控制器:
public ActionResult Edit(int id) { ViewBag.Price = 10.0; return View(); }视图:
@Html.TextBox("Price")
产生结果:
<input id="Price" name="Price" type="text" value="10"/>
情况二:
控制器:
public ActionResult Edit(int id) { ViewBag.Album=new Album{Price=11} return View(); }视图:
@Html.TextBox("Album.Price")
产生结果:
<input id="Album.Price" name="Album.Price" type="text" value="11"/>
情况三:
如果想生成的值带小数点,那么 Price=11.0m
7、强类型辅助方法
使用强类型辅助方法时,只需要为其传递一个lambda表达式来指定要渲染的模型属性。表达式的模型类型必须和为视图指定的模型类型(使用@model指令)一致。
对于强类型视图,需要在视图顶部输入如下所示的代码:
@model MvcMusicStore.Models.Album
使用强类型辅助方法
@Html.LabelFor(model => model.GenreId, "GenreId", new { @class = "control-label col-md-2" })
注意:如果没有提供足够的信息,使其能直接读取模型的Title属性来获取需要的值。
8、辅助方法和模型元数据
如:@Html.Label("GenreId");
生成HTML标记
<label for="GenrdId">Genre</label>
文本Genre从哪里来的?辅助方法运行时,从装饰Album模型的DisplayName特性中获取的信息。
[DisplayName("Genre")]
public int GenreId{get;set;}
9、模板辅助方法
ASP.NET MVC中模板辅助方法利用元数据和模板构建HTML。元数据:包括关于模型值(它的名称和类型)的信息和(通过数据注解或自定义提供器添加的)模型元数据。
模型辅助方法:Html.Display和Html.Editor,以及分别与它们对应的强类型方法Html.DisplayFor和Html.EditorFor,还有它们对应的完整模型
Html.DisplayForModel和Html.EditorForModel。
例如:Html.TextBoxFor辅助方法为某个专辑的Title属性生成如下Html标记
<input id="Title" name="Title" type="text" value="值"/>也可以用EditorFor方法取而代之:
@Html.EditorFor(m=>m.Title)尽管两种方法生成的同样的HTML标记,但EditorFor方法是使用元数据(数据注释)来改变生成的HTML.
如下:在Title属性添加一个DataType注释。
[Required(ErrorMessage="不能为空")] [StringLength(160)] [DataType(DataType.MultilineText)] public string Title{get;set;}EditorFor辅助方法生成如下HTML标记:
<textarea class="text-box multi-line" id="Title" name="Title"> 内容 </textarea>
10、辅助方法和ModelState
存储模型绑定期间监测到的所有验证错误,以及用户提交用来更新模型的元素值。三、其他输入辅助方法
1、Html.Hidden 隐藏的输入元素
@Html.Hidden("wizardStep","1")强类型版本:@Html.HiddenFor(m=>m.wizardStep)
生成如下所示的HTML标记:
<input id="wizardStep" name="wizardStep" type="hidden" value="1"/>
2、Html.Password 密码字段
@Html.Password("UserPassword")强类型版本:@Html.PasswordFor(m=>m.UserPassword)
3、Html.RadioButton
@Html.RadioButton("color","red")@Html.RadioButton("color","blue",true)
@Html.RadioButton("color","green")
生成的Html:
<input id="color" name="color" type="radio" value="red" />
<input checked="checked" id="color" name="color" type="radio" value="blue" />
<input id="color" name="color" type="radio" value="green" />
强类型对应方法:
@Html.RadioButtonFor(m=>m.GenreId,"1")
@Html.RadioButtonFor(m=>m.GenreId,"2")
@Html.RadioButtonFor(m=>m.GenreId,"3")
4、Html.CheckBox
@Html.CheckBox("IsDiscounted")唯一一个渲染两个输入元素的辅助方法。
<input id="IsDiscounted" name="IsDiscounted" type="checkbox" value="true" />
<input name="IsDiscounted" type="hidden" value="false" />
HTML规范中规定浏览器只提交选中的复选框的值。但是第二隐藏输入元素就保证了IsDiscounted有一个值会被提交,即便用户没有选择这个复选框。
四、渲染辅助方法
渲染辅助方法可在应用程序中生成指向其他资源的链接,也可以构建被称为部分视图的可重用UI片段。1、Html.ActionLink和Html.RouteLink
ActionLink渲染一个超链接。@Html.ActionLink("编辑","Edit","StoreManager",new {id=1},null)
生成:
<a href="/StoreManager/Edit/1">编辑</a>
Html.RouteLink只接收路由名称
@Html.RouteLink("Link Text",new {action="Edit"})
2、URL辅助方法
(1)、Action 生成一个URL(不是链接)(2)、RouteUrl和RouteLink一样
(3)、Content 辅助方法:相对路径转换成绝对路径。
<script src="@Url.Content("~/***.js")" type="text/javascript"></scritp>
ASP.Net Mvc5使用的是Razor的第三版本,波浪号当出现在script、style和img元素的src特性时就会被自动解析.
<script src="~/***.js" type="text/javascript"></scritp>
3、Html.Partial和Html.RenderPartial
Partial辅助方法用于将部分视图渲染成字符串。4、Html.Action和Html.RenderAction
强烈推荐学习下载:MvcMusicStore源码学习推荐阅读:
【C# - Entity Framework】无法检索"xxxxx"的元数据
HtmlHelper用法大全2:TextBox、Password、TextArea、RadioButton、CheckBox
HtmlHelper用法大全3:Html.LabelFor、Html.EditorFor、Html.RadioButtonFor、Html.CheckBoxFor
HtmlHelper用法大全
相关文章推荐
- HTML表单的类型和使用方法
- ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法
- ASP.NET MVC 系列之 (强类型HTML辅助方法使用)
- Web MVC开发程序代码的简写方法,强类型数据和Html helper使用方法。车老师代码
- 详解ASP.NET MVC 2中强类型HTML辅助方法
- ASP.NET MVC3学习心得-----表单和HTML辅助方法
- ASP.NET MVC 2博客系列之一:强类型HTML辅助方法
- ASP.NET MVC 2博客系列之一:强类型HTML辅助方法 之scottgu的文章
- ASP.NET MVC 2之强类型HTML辅助方法
- jQuery使用serialize(),serializeArray()方法取得表单数据+字符串和对象类型两种表单提交的方法
- ASP.NET MVC3学习心得-----表单和HTML辅助方法
- asp.net mvc 3.0 知识点整理 ----- (3).HtmlHelper(Html 辅助方法)介绍
- [翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
- asp.ner mvc3表单和HTML辅助方法(二)
- MVC:表单和HTML辅助方法
- asp.net mvc 强类型HTML辅助方法
- “System.Web.Mvc.HtmlHelper”不包含“RouteLink”的定义,并且找不到可接受类型为“System.Web.Mvc.HtmlHelper”的第一个参数的扩展方法“RouteLink”...
- dhl: 在 ASP.NET MVC 中创建自定义 HtmlHelper 使用扩展方法创建 HTML Helper
- Html辅助方法 之 Form表单标签
- 详解ASP.NET MVC 2中强类型HTML辅助方法