第4章 深入动作方法
4.1 神奇的动作方法参数
在ASP.NET MVC中,可以把路由数据(对应RouteData),URL数据(对应
Request.QueryString集合),表单数据(对应Request.Form集合),自动映射
到动作方法参数中。
在定义动作方法参数时,需要保证以下几点。
>方法参数的命名要求,方法参数必须与目标数据参数一致,不区分大小写。
>参数数据类型的要求,数据类型兼容。
4.2 使用验证功能
4.2.1 验证特性
ASP.NET MVC 中常见的验证特性 | |
验证特性 | 功能 |
Required | 必填验证 |
Compare | 比较验证 |
StringLength | 字符串的长度验证 |
Range | 数据范围验证 |
RegularExpression | 正则表达式 |
这些验证都属于System.ComponentModel.DataAnnotations命名空间,并继承
自ValidationAttribute类,该类包含的一个基本的属性就是ErrorMessage,
即用来定义消息的属性。
1.Required验证特性
示例:
[Required(ErrorMessage=”姓名不得为空”)]
Public string Name{get;set;}//姓名
2.StringLength验证特性
示例:
[StringLength(2000,ErrorMessage=”{0}长度不能超过{1}”)]
Public string Remarks{get;set;}//备注
[StringLength(11,MinimumLength=7,ErrorMessage=”{0}长度必须在{2}和{1}
之间”)]
Public string Telephone{get;set;}//电话号码
3.Range验证特性
示例:
[Range(10,1000,ErrorMessage=”{0}必须在{1}和{2}之间”)]
Public int? Price{get;set;}//价格
[Range(25.0,150.0,ErrorMessage=”{0}必须在{1}和{2}之间”)]
Public double? Weight{get;set;}//体重
[Range(typeof(DateTime),”2012-1-1”,”2012-10-1”,ErrorMessage=”{0}
必须在{1}和{2}之间”)]
Public DateTime? PublishTime{get;set;}//发布日期
4.Compare验证特性
示例:
Public string Password{get;set;}//密码
[Compare(“Password”,ErrorMessage=”两次输入密码必须一致”)]
Public string PasswordConfirm{get;set;}//重复密码
5.RegularExpression验证特性
[RegularExpression(@”正则表达式”,ErrorMessage=”{0}格式错误”)]
Public string MailAddress{get;set;}//Email地址
在实际开发中,一般每个属性还会应用System.ComponentModel.DisplayName
特性。
示例:
[DisplayName(“密码”)]
[Required(ErrorMessage=“{0}不能为空”)]
Public string LoginPwd{get;set;}
自定义验证比较繁琐,一般是重写ValidationAttribute类,编写服务器端的
验证规则;另外,还需要编写客户端的验证规则。
4.2.2 ModelState和服务器端验证
>ModelState.IsValid//验证生效,是否通过
>ModelState.AddModelError(“错误名”,”错误信息”)//添加额外错误信息
Html对象的两个帮助方法来输出验证信息,如下所示:
Public MvcHtmlString ValidationMessage(string modelName);//验证单个信息
Public MvcHtmlString ValidationSummary();//汇总验证
4.3 方法不等与动作方法
4.3.1 动作方法上的特性
1.[HttpGet]
2.[HttpPost]
3.[NonAction]
4.[ActionName(“Index”)]
当动作方法应用了ActionName特性后,如果动作方法内部使用View()方法调用
视图(不指定视图的名称),则调用的是和ActionName设置同名的视图。
4.4 从动作方法到内容输出
4.4.1 解析ActionResult
常用输出类型 | |
类型 | 说明 |
EmptyResult | 没有返回值,动作方法不需要输出时使用 |
ContentResult | 将指定内容作为文本输出 |
JsonResult | 输出Json字符串 |
JavaScriptResult | 输出JavaScript文件 |
RedirectResult | 指定的URL来执行重定向 |
RedirectToRouteResult | 使用指定的路由值字典来执行重定向的结果 |
FilePathResult | 继承自FileResult抽象类,指定文件路径来输出文件 |
FileContentResult | 继承自FileResult抽象类,指定流来输出文件 |
FileStreamResult | 继承自FileResult抽象类,指定字节数组来输出文件 |
ViewResult | 继承自ViewResultBase抽象类,调用视图文件输出视图 |
PartialViewResult | 调用视图文件输出分部视图 |
常用控制器输出方法 | |
类型 | 说明 |
ContentResult Content(stirng content) | 指定内容作为文本输出,content代表要输出的内容 |
JsonResult Json(object data) | 输出Json字符串,data要序列化的对象,JsonRequestBehavior.AllowGet |
JavaScriptResult JavaScript(string script) | 输出JavaScript文件 |
RedirectResult Redirect(string url) | 执行重定向,url表示重定向的地址 |
RedirectToRouteResult RedirectToRoute(object routeValue) | 执行重定向,routeValue对应路由参数值 |
RedirectToRouteResult RedirectToAction (string actionName) | 执行重定向,actionName对应方法名 |
FilePathResult File(string filename, String contentType) | 输出文件,filename对应文件名,contentType对应输出类型 |
FileContentResult File(byte[] fileContents, string contentType) | 输出文件,fileContents对应二进制文件内容,contentType对应输出类型 |
FileStreamResult File(Stream fileStream, String contentType) | 输出文件,fileStream对应文件流,contentType对应输出类型 |
ViewResult View(string viewName) | 输出视图页,viewName对应试图页名称 |
PartialViewResult PartialView(string viewName) | 输出分部视图,viewName对应视图名称 |
4.4.2 视图助手——HtmlHelper
常用HtmlHelper输出方法 | |
常用方法 | 说明 |
MvcForm BeginForm (stirng actionName, stirng controllerName) | 输出<form/> |
MvcHtmlString Hidden(string name) | 输出<input type=”hidden”/> |
MvcHtmlString Password (string name) | 输出<input type=”password”/> |
MvcHtmlString RadioButtion (string name,object value) | 输出<input type=”radio”/> |
MvcHtmlString CheckBox (string name) | 输出<input type=”checkbox”/> |
MvcHtmlString TextBox(stirng name) | 输出<input type=”text”/> |
MvcHtmlString TextArea (string name) | 输出<textarea/> |
MvcHtmlString DropDownList (string name) | 输出<select/> |
MvcHtmlString ListBox(string name) | 输出<select multiple=”true”/> |
MvcHtmlString ActionLink(string linkText,string actionName) | 输出<a/> |
MvcHtmlString RouteLink(string linkText,object routeVaues) | 输出<a/> |
MvcHtmlString ValidationMessage (string modelName) | 输出单条验证信息 |
MvcHtmlString ValidationSummary() | 输出验证汇总信息 |
MvcHtmlString Partial (string partialViewName) | 输出分部视图 |
4.4.3 自动生成客户端验证
1.导入js脚本
>jquery-1.7.1.min.js
>jquery-validate.min.js
>jquery.validate.unobtrusive.min.js
2.使用HtmlHelper编写Form表单