当前位置:编程学习 > asp >>

ASP.NET MVC 音乐商店 - 9. 注册和结账

 

在这一节,我们将创建结账的控制器 CheckoutController 来收集用户的地址和付款信息,我们需要用户在结账前注册账户,因为这个控制器需要授权。

当用户点击结账 Checkout 按钮的时候,用户将会被导航到结账的处理流程中。

\

 

如果用户没有登录,将会被提示需要登录。

\

 

一旦用户成功登陆,用户就可以看到地址和付款的视图。

\

 

一旦用户填写了这个表单并提交,他们将会看到订单的确认页面。

\

 

视图访问不存在的订单,或者不属于你的订单,将会看到错误页面。

\

 

 

 

合并购物车

 

在匿名购物的时候,当用户点击结账Checkout 按钮,用户会被要求注册和登陆,用户会希望继续使用原来的购物车,所以,在匿名用户登录之后,我们需要维护购物车。

实际上非常简单,因为ShoppingCart 类已经提供了一个方法,通过当前的用户名来获取购物车中所有的项目,在用户注册登录以后,我们只需要调用这个方法。

打开在成员管理和授权中添加的AccountController 类,增加一个using 来引用MvcMusicStore.Models,然后,增加MigrateShoppingCart 方法。

private void MigrateShoppingCart(string UserName)

{

    // Associate shopping cart items with logged-in user

    var cart = ShoppingCart.GetCart(this.HttpContext);

    cart.MigrateCart(UserName);

    Session[ShoppingCart.CartSessionKey] = UserName;

}

 

然后,修改LonOn 的Post 处理方法,在用户通过验证之后,调用MigrateShoppingCart  方法。

 

//

// POST: /Account/LogOn

[HttpPost]

public ActionResult LogOn(LogOnModel model, string returnUrl)

{

    if (ModelState.IsValid)

    {

        if (Membership.ValidateUser(model.UserName, model.Password))

        {

            MigrateShoppingCart(model.UserName);

            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")

            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))

            {

                return Redirect(returnUrl);

            }

            else

            {

                return RedirectToAction("Index", "Home");

            }

        }

        else

        {

            ModelState.AddModelError("", "The user name or password provided is incorrect.");

        }

    }

    // If we got this far, something failed, redisplay form

    return View(model);

}

 

在Register 的Post 处理方法中,一旦用户成功创建帐户,也进行类似的修改,

//

// POST: /Account/Register

[HttpPost]

public ActionResult Register(RegisterModel model)

{

    if (ModelState.IsValid)

    {

        // Attempt to register the user

        MembershipCreateStatus createStatus;

        Membership.CreateUser(model.UserName, model.Password, model.Email, "question", "answer", true, null, out createStatus);

        if (createStatus == MembershipCreateStatus.Success)

        {

       

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,