2017-01-17 21 views
1

ASP MVC、jQuery & AJAXを使用して.Net Webアプリケーションを開発しています。 製品の詳細ボタンをクリックすると、詳細ビ​​ューにリダイレクトされ、「カートに追加」ボタンが含まれていますAJAXコールを使用してユーザー認証のフォームをリダイレクト

このボタンは、次のセグメントコードをアクションとして呼び出します。私の見解では

[Authorize] 
    public ActionResult AddToCart(int articleId) 
    { 
     ViewBag.CartCount = 0; 
     List<Cart> cart = null; 

     if (User.Identity.IsAuthenticated) 
     { 
      if (Session["Cart"] == null) 
      { 
       cart = new List<Cart>(); 
       cart.Add(new Cart { ArticleId = articleId, Count = 1, DateCreated = DateTime.Now }); 
       Session["Cart"] = cart; 
      } 
      else 
      { 
       cart = Session["Cart"] as List<Cart>; 
       var alreadyOrdered = cart.FirstOrDefault(x => x.ArticleId == articleId); 
       cart.Remove(alreadyOrdered); 

       if (alreadyOrdered != null) 
       { 
        alreadyOrdered.Count++; 
        cart.Add(alreadyOrdered); 
       } 
       else 
       { 
        cart.Add(new Cart { ArticleId = articleId, Count = 1, DateCreated = DateTime.Now }); 
       } 
       Session["Cart"] = cart; 
      } 
      ViewBag.CartCount = cart.Count; 
      return Content(cart.Count.ToString()); 
     } 

     return RedirectToAction("Login", "Account"); 
    } 

私は、次のコードを持っている:

@model WebShop.Web.ViewModels.ArticleViewModel 

<div class="row"> 
    <div class="col-md-6"> 
     <img src="http://placehold.it/400x250/000/fff" 
      alt="Kodak Brownie Flash B Camera" 
      class="image-responsive" /> 
    </div> 
    <div class="col-md-6"> 
     <div class="row"> 
      <div class="col-md-12"> 
       <h1>@Model.Label</h1> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="col-md-12"> 
       <span class="label label-default">@Model.CategoryName</span> 
       <span class="label label-info">@Model.SubCategoryName</span> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="col-md-12"> 
       <p class="description"> 
        @Model.Description 
       </p> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="col-md-12 bottom-rule"> 
       <h2 class="product-price">@Model.Price.ToString("###") €</h2> 
      </div> 
     </div> 
     <div class="row add-to-cart"> 
      <div class="col-md-5 product-qty"> 
       <span class="btn btn-default btn-lg btn-qty"> 
        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> 
       </span> 
       <input class="btn btn-default btn-lg btn-qty" value="1" /> 
       <span class="btn btn-default btn-lg btn-qty"> 
        <span class="glyphicon glyphicon-minus" aria-hidden="true"></span> 
       </span> 
      </div> 
      <div class="col-md-4"> 
       <button class="btn btn-lg btn-brand btn-full-width addToCart" id="@Model.Id"> 
        Ajouter au panier 
       </button> 
      </div> 
     </div><!-- end row --> 
     <div class="row"> 
      <div class="col-md-12 bottom-rule top-10"></div> 
     </div> 
    </div> 
</div> 

<script> 
    $(document).ready(function() { 
     $('.addToCart').click(function() { 
      var articleId = parseInt($(this).attr('id')); 

      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("AddToCart", "Shopping")', 
       data: { articleId: articleId }, 
       success: function (data) { 
        $('#CartModal').html(data); 
        console.log(data); 
       }, 
       error: function (err) { 
        console.log(err); 
       } 
      }); 

     }); 
    }); 
</script> 

を私の願いは、私は、「カートに入れる」ボタンをクリックしたときであり、ユーザーは自分が認証にリダイレクトする必要があり、認証されていませんページ(私は、ASPテンプレートを使用しているaut彼の製品の選択を続ける。 ユーザーが既に接続されている場合は、値を返す必要があります。 つまり、認証されていない場合は、ユーザーをログオンページにリダイレクトします。

このシナリオをどのように処理できますか?あなたの助けを事前に

おかげで(それはstackoverflowの中に私の最初の投稿です)

答えて

0

ます(ログインページにリダイレクトし、このデータアクションメソッドから、あなたのAJAX呼び出しのチェックにJSONレスポンスを返し、何をすべきかを決定する必要がありますまたはいくつかの他のページや他の何か)

すべてが良いになると、ユーザーが認証されていない場合は、この

{ 
    "status":"success", 
    "cartItemCount":3 
} 

のようなJSONを返すこの

ような何かを返すことができます。
{ 
    "status":"notloggedin" 
    "redirectUrl":"account/login" 
} 

だからあなたのアクションメソッドのコードは、statusプロパティをチェックして、

success: function (data) { 
    if(data.status==="success") 
    { 
    $('#CartModal').html(data.cartItemCount); 
    } 
    else if(data.status==="notloggedin") 
    { 
    window.location.href=data.redirectUrl; 
    } 
    else 
    { 
    alert("some error"); 
    } 
} 

最後に、URLのアクションでを生成するために、必要に応じてリダイレクトするあなたの成功コールバックで今すぐ

if (User.Identity.IsAuthenticated) 
{ 
    // set to cart session 
    return Json(new { status="success", cartItemCount=cart.Count()}); 
} 
else 
{ 
    var rUrl="url to login action here"; //use UrlHelper to generate this 
    return Json(new { status="notloggedin", redirectUrl=redirectUrl }); 
} 

ようなものになるだろう方法を試してみてください

+1

ありがとうございます*私の問題を抱えていた! – Fariid

関連する問題