ASP.NET MVC3学习心得-----表单和HTML辅助方法

5.1表单的使用

5.1.1  action和method的特性

表单是包含输入元素的容器,包含按钮、复选框、文本框等元素,表单的这些输入元素使得用户能够向页面中输入信息,并把输入信息提交给服务器。Action特性告知浏览器将URL提交到哪里,method特性来说明用何种方式告知浏览器,默认为get方法

5.1.2Get和Post方法

1、如果不想让浏览器把输入值放入查询字符串中,而是想放入HTTP请求的主体中,可以为method赋值post,post可以用来提交信用卡信息、向购物车添加专辑或者修改密码等,post请求通常会改变服务器上的状态,重复提交等。POST请求用于写操作

2、Get请求所有的参数都在URL中,代表的是幂等操作和只读操作,不会改变服务器的状态,可以向客户端重复的发送GET请求而不会产生负面影响,GET请求用于读操作

示例:通过计算Action特性值来搜索音乐,使用HTML辅助方法代劳如下:

@using(Html.BeginForm("Search","StoreManager",FormMethod.Get)){

}

5.2HTML辅助方法

HTML辅助方法可以通过视图的Html属性调用的方法。当然也可以通过Url的属性调用URL辅助方法,通过Ajax属性调用AJAX辅助方法,所有的这些方法目的就是为了让视图编码变得容易。

如上边提到的Html.BeginForm()方法,在后台该辅助方法与路由引擎协调以生成合适的URL。该辅助方法在调用期间生成一个起始标签,并返回了一个IDisposable对象,当执行到using语句的结束花括号时,隐式的调用Dispose方法,因此该辅助方法会生成一个结束标签。

5.2.1 自动编码

例:TextArea辅助方法,用来输出HTML元素textarea

@Html.TextArea("text","hello
world!");

5.2.2 辅助方法的使用

BeginForm的另一个重载版本

@using (Html.BeginForm("Search","StoreManager",FormMethod.Get,new{ target="_blank"}))

{

}

该重载代码向BeginForm方法的htmlAttributes参数传递了一个匿名类对象,在ASP.NET MVC 框架中每一个HTML辅助方法在它某个重载方法中都有一个htmlAttributes参数,不同的版本中htmlAttributes的参数类型是IDictionary辅助方法采用字典条目并利用这些条目创建辅助方法生成元素特性

通过使用htmlAttributes参数设置许多必要的特性,如设置一个元素的class属性,因为class为C#关键字这时需要在class前加@,即@class。

此外将属性设为带有连字符的名称(如:data-val),但是带有连字符的C#属性名是无效的,所有辅助方法在渲染HTML时会将属性名中的下划线转换为连字符。

示例如下:

@using (Html.BeginForm("Search", "StoreManager", FormMethod.Get, new

{

    target = "blank",

    @class = "green",

    data_validatable = true

}))

{

    

    

}

5.2.3 HTML辅助方法的工作原理

每个Razor视图都继承了各自基类的Html的属性,Html属性的类型是System.web.mvc.HtmlHelper这里的T是一个泛型参数,代表传递给视图的模型类型,该属性提供了一些可以在视图中调用的方法,如:EnableClientValidation(选择性的关闭(打开)客户端验证)

5.2.4设置专辑编辑表单

@using (Html.BeginForm()) {

    @Html.ValidationSummary(true)

    

        Album

}

该视图中使用了两个方法,

1、Html.BeginForm:该方法上边已有介绍

2、Html.ValidationSummary:用来显示ModelState字典中所有验证错误的无序列表,使用布尔值类型参数(true)来告知辅助方法排除属性级别的错误,只显示ModelState中与模型本身有关的错误,而不显示与具体模型属性相关的错误。

3、示例:

            ModelState.AddModelError("", "This is all wrong!");

            ModelState.AddModelError("Title", "what a  terrible name!");

在控制器某个操作中添加以上代码用来渲染编辑视图,

第一个错误是模型级别的,因为代码中没有提供关联错误与特定属性的键,

第二个错误是与属性相关联的错误,因此在视图验证摘要区不会显示这个错误

5.2.5 添加输入元素

1、Html.TextBox(和Html.TextArea)

调用形式如下:

@Html.TextBox("Title",Model.Title);

@Html.TextArea("text","Hello");

重载版本:@Html.TextArea("text","hello world",10,80,null);

渲染为hello world

2、HTML.Label

该方法返回一个元素,并用string类型的参数决定渲染的文本和特性值

Html.Label("GenreId")如下:Genre

我们可以发现label渲染的文本不是“GenreId",而是"Genre",在可能的情况下,辅助方法使用任何可用的模型元数据来生成显示内容

3、Html.DropDownList(和Html.ListBox)

这两个辅助方法都返回一个