9.5 为Order类定义验证规则
现在我们的视图已经编写完成了,与之前在Book(书籍)类中所作的做法相同,我们将为我们的Order(订单)类添加验证规则。鼠标右击Models文 件夹,追加一个名为Order的类。除了我们之前在Book类中使用过的验证属性之外,我们还将使用一个正则表达式来验证用户的e-mail地址。 Order类的完整代码如代码清单9-3所示。
代码清单9-3 Order类的完整代码
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace MvcBookStore.Models
{
[Bind(Exclude = "OrderId")]
public partial class Order
{
[ScaffoldColumn(false)]
public int OrderId { get; set; }
[ScaffoldColumn(false)]
public System.DateTime OrderDate { get; set; }
[ScaffoldColumn(false)]
public string Username { get; set; }
[Required(ErrorMessage = "必须填写姓")]
[DisplayName("姓")]
[StringLength(160)]
public string FirstName { get; set; }
[Required(ErrorMessage = "必须填写名")]
[DisplayName("名")]
[StringLength(160)]
public string LastName { get; set; }
[Required(ErrorMessage = "必须填写收货地址")]
[StringLength(70)]
[DisplayName("收货地址")]
public string Address { get; set; }
[Required(ErrorMessage = "必须填写省")]
[StringLength(40)]
[DisplayName("省")]
public string State { get; set; }
[Required(ErrorMessage = "必须填写城市")]
[StringLength(40)]
[DisplayName("城市")]
public string City { get; set; }
[Required(ErrorMessage = "必须填写邮政编号")]
[DisplayName("邮政编号")]
[StringLength(10)]
public string PostalCode { get; set; }
[Required(ErrorMessage = "必须填写国家")]
[StringLength(40)]
[DisplayName("国家")]
public string Country { get; set; }
[Required(ErrorMessage = "必须填写电话号码")]
[StringLength(24)]
[DisplayName("电话号码")]
public string Phone { get; set; }
[Required(ErrorMessage = "必须填写e-mail地址")]
[DisplayName("e-mail地址")]
[Regularexpression_r(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]
+\.[A-Za-z]{2,4}",ErrorMessage = "填写的e-mail地址无
效.")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[ScaffoldColumn(false)]
public decimal Total { get; set; }
public List<OrderDetail> OrderDetails { get; set; }
}
}
当提交表单时如果填写内容有错误的话,将会由于客户端的验证而立即看见错误提示,如图9-8所示。
图9-8 填写内容有错误的话可以立即看见错误提示
好了,我们已经完成了下订单过程中最困难的部分;我们现在还剩下来一点点工作要做。我们还要追加两个简单视图,我们需要添加一个订单完成通知视图。
9.6 订单完成通知视图
订单完成通知视图非常简单,只是显示一下订单编号。在Complete方法中点击鼠标右键,使用int类性添加一个强类型的视图,如图9-9所示。
图9-9 添加订单完成通知视图
修改视图中的代码,先是订单编号,代码如代码清单9-4中所示。
代码清单9-4 订单完成通知视图中的代码
@model int
@{
ViewBag.Title = "订单已完成";
}
<h2>订单完成</h2>
<p>感谢您的本次购货! 您的订单号为: @Model</p>
<p>
@Html.ActionLink("继续购书", "Index",
"首页")
</p>
9.7 修改错误视图
空的应用程序模板中在Shared视图文件夹中自带一个错误视图,以供整个网站使用。该错误视图中只包含一个简单错误信息,也不使用公共视图模板,所以需要修改一下。
因为这是一个公用错误视图,所以内容要尽量简单。我们在其中放入一个错误提示信息与一个返回到之前页面的“后退”链接,以便用户在发现错误后重新返回原视图进行操作。代码如下所示。
@{
ViewBag.Title = "出错提示";
}
<h2>出错提示</h2>
<p>对不起,操作失败。
<a href="javascript:history.go(-1)">后退</a>
</p>