ASP.NET MVC把数据验证集成到了请求处理过程中,控制器操作可以通过查询ModelState 来检查请求是否有效, 下面判断了ModelState的有效性后进行“保存或返回”操作。
[HttpPost]
public ActionResult Create(Auction auction)
{
if (ModelState.IsValid)
{
var db = new EbuyDataContext();
db.Auctions.Add(auction);
db.SaveChanges();
return RedirectToAction("Details", new { id = auction.Id });
}
return View(auction);
}
除了以上的验证手段, 微软还提供了非常有效便捷的数据验证API, 称为数据标注。 开发人员可以直接标记在数据对象的属性上。 这些标记属性提供了设置验证规则的声明方式。
在Auction.cs文件里的Model代码里这样声明
public class Auction
{
public long Id { get; set; }
[Required]
[StringLength(50,ErrorMessage = "Title 长度不能超过50 ")]
public string Title { get; set; }
[Required]
public string Description { get; set; }
[Range(1,10000,ErrorMessage = " 拍卖价格必须最小为1个单位")]
public decimal StartPrice { get; set; }
public decimal CurrentPrice { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
}
除了标记字段为必须的(Required)外, 还可以确保字符长度满足了最短长度的StringLengthAttribute属性标记的要求。还可以用RangeAttribute标记属性验证范围, 数据标记还提供ErrorMessage属性,可以返回用户自定义的错误信息。
在表单视图用Html.ValidationMessage(string modelName)帮助方法,可以在相关的控件右边渲染出验证有关的错误提示信息。
@model Ebuy.Models.Auction
@{
ViewBag.Title = "Create";
}
<h2>
Create Auction</h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary();
<p>
@Html.LabelFor(model => model.Title)
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title);
</p>
以上都是服务端的验证方法,还可以使用客户端验证的方法
ASP.NET MVC 框架从第三版开始提供了客户端验证支持, 默认是启用的,也可以在配置文件W
eb.config里设置启用和关闭这项功能
<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
</configuration>
进行客户端验证,需要在视图文件里引用jQuery验证插件:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobstrusive.min.js")" type="text/javascript"></script>
VisualStudio可以使用 @Scripts.Render("~/bundles/jquery-val") 来达到用样效果。
使用客户端验证,在提交的时候就可以验证输入,无需提交给服务器,不需要页面刷新,