2016-01-13 101 views
1

我正在開發一個asp.net mvc 5在線商店項目。我想創建cart以添加商品Cookie。我很困惑,不知道爲什麼它不起作用。它沒有給我任何錯誤。我還添加了斷點來調試它,但是沒有任何數據發送到我的操作! 任何人都可以幫助我嗎?有什麼問題 ? 我不是javascript好,我覺得問題就在javascript代碼:提前/ 感謝爲什麼這些cookie代碼在asp.net mvc中不起作用?

商品控制器

[HttpPost] 
public ActionResult AddToCart(int Id, int Count) 
    { 
     try 
     { 
      if (Request.Cookies.AllKeys.Contains("NishtmanCart_" + Id.ToString())) 
      { 
       //edit cookie 
       var cookie = new HttpCookie("NishtmanCart_" + Id.ToString(), (Convert.ToInt32(Request.Cookies["NishtmanCart_" + Id.ToString()].Value) + 1).ToString()); 
       cookie.Expires = DateTime.Now.AddMonths(1); 
       cookie.HttpOnly = true; 
       Response.Cookies.Set(cookie); 
      } 
      else 
      { 
       //add new cookie 
       var cookie = new HttpCookie("NishtmanCart_" + Id.ToString(), Count.ToString()); 
       cookie.Expires = DateTime.Now.AddMonths(1); 
       cookie.HttpOnly = true; 
       Response.Cookies.Add(cookie); 
      } 
      int CartCount = Request.Cookies.AllKeys.Where(p => p.StartsWith("NishtmanCart_")).Count(); 
      return Json(new MyJsonData() 
      { 
       Success = true, 
       Script = MessageBox.Show("product added to your basket", MessageType.Success).Script, 
       Html = "Shopping Cart (" + CartCount.ToString() + ")" 
      }); 
     } 
     catch (Exception) 
     { 
      return Json(new MyJsonData() 
      { 
       Success = false, 
       Script = MessageBox.Show("product didn't add to your basket", MessageType.Error).Script, 
       Html = "" 
      }); 
     } 
    } 

    public ActionResult RemoveCart(int Id) 
    { 

     try 
     { 
      int CartCount = Request.Cookies.AllKeys.Where(p => p.StartsWith("NishtmanCart_")).Count(); 

      if (Request.Cookies.AllKeys.Contains("NishtmanCart_" + Id.ToString())) 
      { 
       Request.Cookies["NishtmanCart_" + Id.ToString()].Expires = DateTime.Now.AddDays(-1); 
       return Json(new MyJsonData() 
       { 
        Success = true, 
        Script = MessageBox.Show("product removed from your basket", MessageType.Success).Script, 
        Html = "Shopping Cart (" + CartCount.ToString() + ")" 
       }); 
      } 
      else 
      { 
       return Json(new MyJsonData() 
       { 
        Success = false, 
        Script = MessageBox.Show("this product doesn't have in your basket", MessageType.Warning).Script, 
        Html = "Shopping Cart (" + CartCount.ToString() + ")" 
       }); 
      } 
     } 
     catch (Exception) 
     { 
      return Json(new MyJsonData() 
      { 
       Success = true, 
       Script = MessageBox.Show("product didn't remove from your basket", MessageType.Error).Script, 
       Html = "" 
      }); 
     } 

    } 

MyJsonData.cs

public class MyJsonData 
{ 
    public string Script { get; set; } 
    public string Html { get; set; } 
    public bool Success { get; set; } 
} 

_ GoodDetailsAjax.cshtml

@foreach (var item in Model.GoodDetails) 
{ 
    <div> 
     <p class="nowprice">NowPrice : @item.DetailsNowPrice</p> 
     <p class="preprice">PrePrice : @item.DetailsPrePrice</p> 
     <a class="button icon-cart" href="#" GoodID="@item.DetailsGoodID">Add to cart</a><br> 
     <a class="link" >Shopping Cart (0)</a> 
    </div> 
} 
@section scripts{ 
<script src="~/Scripts/jquery-2.1.4.min.js"></script> 
<script src="~/Scripts/bootstrap.min.js"></script> 
<script> 
    $(function() { 
     $("a.button.icon-cart").click(function (e) { 
      e.preventDefault(); 
      var goodId = $(this).attr("GoodID"); 
      alert(goodId); //////// I just added this code 
      $.ajax({ 
       url: "/Goods/AddToCart", 
       data: { Id: goodId, Count: 1 }, 
       type: "Post", 
       dataType: "Json", 
       success: function (result) { 
        if (result.Success) { 
         $("#CartItems").html(result.Html); 
        } 
        eval(result.Script); 
       }, 
       error: function() { 
        alert("Error!"); 
       } 
      }); 
     }); 
    }); 
</script> 
} 
+0

你用這段代碼面臨什麼問題?你可以請更具體嗎? –

+0

您正在返回JSON,我認爲這意味着您正在發出AJAX請求。如果你想添加/刪除cookie,你需要發出HTTP請求。 –

+0

它沒有工作,當我點擊'添加到購物車按鈕'它應該添加1計數到'購物車'標記,但它沒有@FrebinFrancis –

回答

0

我所有的代碼都是真的,我只是犯了一些簡單的錯誤。

我在我的佈局中加載了一個JQuery文件,並且在我的視圖中加載了另一個JQuery版本!我刪除了其中一個。

而且我在部分視圖中使用這些代碼並使用Ajax加載它們,但是我的部分視圖無法將數據傳遞到控制器,我將代碼移動到主視圖(GoodDetails.cshtml),現在它工作正常。

+0

很高興聽到你解決了這個問題:) –

+0

隨着你的幫助...謝謝親愛的@FrebinFrancis :) –

1

我不知道什麼是的MessageBox.Show("....", MessageType.Error).Script實施,但我猜想,它只是產生一個簡單的JavaScript語句是這樣的:

Script = "alert('product added to your basket');" 

所以,你可以添加此標記結果:

<div id="CartItems"> 

</div> 

現在它沒有任何問題。

相關問題