5.1 表单使用
5.1.1 action 和 method 特性
<form action="/Home/Index">
<input name="q" type="text"/>
<input value="提交" type="submit" />
</form>
如果没有 method 默认是: get 方法。
5.1.2 GET 方法还是 POST 方法
get 请求的所有参数都在URL中,因此可以为GET请求建立书签。除此之外,还可以保留所有的表单输入值。
因为GET不会改变服务器上的状态,所以客户端可以向服务端重复发送GET请求而不会产生负面影响。
通常在Web程序中,GET 请求用于读操作,POST 请求用于写操作(通常包括更新,创建和删除)。
<form action="/Home/Index" method="get">
<input name="q" type="text"/>
<input value="提交" type="submit" />
</form>
BeginForm Html 辅助方法
@using (Html.BeginForm("Search","Home",FormMethod.Get)) { <input name="q" type="text"/> <input value="提交" type="submit" /> } |
BeginForm Html 的辅助方法利用路由引擎找到 HomeController 控制器的 Search 操作。它在后台使用 GetVirtualPath 方法,该方法在 Routetable 的 Routes 属性中——在 global.asax 中,应用程序注册所有路由的位置。
public class RouteTable
{
// 摘要:
// 获取从 System.Web.Routing.RouteBase 类派生的对象的集合。
// 返回结果:
// 包含集合中的所有路由的对象。
public static RouteCollection Routes { get; }
}
不采用HTML辅助方法,将编写所有代码:
@{
var context = this.ViewContext.RequestContext;
var values = new RouteValueDictionary {
{"controller","home"},{"action","index" }
};
var path = RouteTable.Routes.GetVirtualPath(context, values);
}
<form action="@path.VirtualPath" method="get">
<input name="q" type="text" />
<input value="提交" type="submit" />
</form>
5.2 HTML辅助方法
5.2.1 自动编码
本章许多辅助方法都可以输出模型值。所有这些输出模型值的方法都会在渲染前,对值进行HTML编码。
@Html.TextArea("text","hello <br/> world");
TextArea 辅助方法的第二个参数是要渲染的值。
<textarea cols="20" id="text" name="text" rows="2">
hello <br/> world
</textarea>
5.2.2 辅助方法的使用(匿名对象 htmlAttributes,属性@class = "editForm",连字符data_validatable = true)
保护代码的同时,辅助方法给出了适当的控制。为了展示辅助方法的作用,下列给出 BeginForm 另外一个重载版本:
@using (Html.BeginForm("Search", "Home", FormMethod.Get,new {target ="_blank"}))
{
<input name="q" type="text" />
<input value="提交" type="submit" />
}
// 参数: // actionName: // 操作方法的名称。 // // controllerName: // 控制器的名称。 // // method: // 用于处理窗体的 HTTP 方法(GET 或 POST)。 // // htmlAttributes: // 一个对象,其中包含要为该元素设置的 HTML 特性。 public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName, FormMethod method, object htmlAttributes); |
向 BeginForm 方法的 htmlAttribute 参数传递一个匿名类型的对象,在MVC框架重载版本中,几乎每一个HTML辅助方法都包含 htmlAttribute 参数,有时发现某些重载版本中 htmlAttribte 参数类型是 IDctionary<string,object> 。辅助方法利用字典条目创建辅助方法生成元素的特性。
<form action="/Home/Search" method="get" target="_blank">
设置元素的 class 特性就要求匿名类型对象上必须有一个名为 class 的属性,或者值的字典中有一个 class 的键。在字典中有一个“class”键值不是问题,问题在对象中有一个 class 的属性。
因为 class 是 C# 的关键字,不能用作属性名称或标识符,所以要在c lass 前面加一个 @符号作为前缀:
@using (Html.BeginForm("Search", "Home", FormMethod.Get,new {target ="_blank",@class = "editForm"}))
{...}
结果:
<form action="/Home/Search" class="editForm" method="get" target="_blank">
另一个问题是将属性设置为带连字符的名称(像 data-val)。
所有 HTML 辅助方法在渲染 HTML 时会将属性名中的下划线转换为连字符。
@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">
5.2.3 HTML 辅助方法工作原理
5.2.4 设置专辑编辑表单
5.2.5 添加输入元素
5.2.6 辅助方法、模型和视图数据
5.2.7 强类型辅助方法
5.2.8 辅助方法和模型元数据
5.2.9 模版辅助方法
5.2.10 辅助方法和 ModelState
5.3 其他输入辅助方法
5.3.1 Html.Hidden
5.3.2 Html.passwrod
5.2.3 Html.RadioButtion
5.2.4 Html.CheckBox
5.4 渲染辅助方法
5.4.1 Html.ActionLink 和 Html.RouteLink
5.4.2 URL 辅助方法
5.4.3 Html.Partial 和 Html.RenderPartial
5.4.4 Html.Action 和 Html.RederAction