@model Wen.BooksStore.Domain.Entities.Contact <div> @using (Html.BeginForm()) { <div >@Html.ValidationSummary()</div> <div>姓名: @Html.TextBoxFor(x => x.Name)</div> <div>地址: @Html.TextBoxFor(x => x.Address)</div> <div>邮箱: @Html.TextBoxFor(x => x.Email)</div> <div><input type=value=/></div> } </div>
这里使用的是模型校验,_Layout.cshtml 布局页需要引入 js:
<script src="~/Scripts/jquery-1.10.2.js"></script> <script src="~/Scripts/jquery.validate.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
<!DOCTYPE html> <html> <head> <meta name=content=/> <title>@ViewBag.Title</title> <link href=rel=/> <script src=></script> <script src=></script> <script src=></script> </head> <body> <div id=> @{ Html.RenderAction(, );} <div >图书商城</div> </div> <div id=> @{ Html.RenderAction(, ); } </div> <div id=> @RenderBody() </div> </body> </html>
_Layout.cshtml
尝试运行,会出现以下页面,如果信息不填的话会出现相关的错误提示:
2.接下来,要进入“提交”后的流程了。
现在还需要一个组件用于处理订单,创建一个用于订单处理的接口,和一个该接口的实现,再通过 Ninject 进行两者的绑定:
订单处理 IOrderProcessor { 处理订单 ProcessOrder(Cart cart, Contact contact); }
建立一个实现该接口用于处理订单的实体类,这里并不是调用支付接口,而是简单通过 BCL 中的进行邮件的发送。
EmailOrderProcessor.cs:
邮件订单处理器 EmailOrderProcessor : IOrderProcessor { 发送人 Sender { 账号 Account = ; 密码 Password = "xxx"; } 处理订单 ProcessOrder(Cart cart, Contact contact) { if (string.IsNullOrEmpty(contact.Email)) { ); } var sb = new StringBuilder(); foreach (var item in cart.GetCartItems) { sb.AppendLine($); } sb.AppendLine($); sb.AppendLine(); sb.AppendLine($); fromAddr = new MailAddress(Sender.Account); var message = new MailMessage { From = fromAddr }; //设置收件人,可添加多个,添加方法与下面的一样 message.To.Add(contact.Email); //设置抄送人 message.CC.Add(Sender.Account); //设置邮件标题 message.Subject = ; //设置邮件内容 message.Body = sb.ToString(); client = , 25) { Credentials = new NetworkCredential(Sender.Account, Sender.Password), EnableSsl = true }; //设置发送人的邮箱账号和密码 //启用ssl,也就是安全发送 //发送邮件 client.Send(message); }
CartController 也需要稍作调整:
还要在 CartController 中额外添加一个带 [HttPost] 特性的名为 Checkout 方法: