【问题标题】:why these cookie codes didn't work in asp.net mvc?为什么这些 cookie 代码在 asp.net mvc 中不起作用?
【发布时间】:2016-04-18 00:20:52
【问题描述】:

我正在开发一个asp.net mvc 5 在线商店项目。我想创建 cart 以使用 Cookie 添加商品。我对此感到困惑,不知道为什么它不起作用。它没有给我任何错误。我还添加了断点来调试它,但任何数据都没有发送到我的操作中! 谁能帮助我?有什么问题 ? 我不擅长javascript,我认为问题出在 javascript 代码中:/ 在此先感谢

货物管制员

 [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>
 }

【问题讨论】:

  • 这段代码有什么问题?你能说得更具体些吗?
  • 您正在返回 JSON,我认为这意味着您正在发出 AJAX 请求。如果要添加/删除 cookie,则需要发出 HTTP 请求。
  • 它不起作用,当我点击“添加到购物车按钮”时,它应该添加 1 个计数到 Shopping cart 一个标签,但它没有 @FrebinFrancis
  • 是的,但我将 Ajax 用于另一个问题,而不是这个@TiesonT。
  • 显示的控制器代码返回 JSON,而不是 HTML,如果不是通过 XMLHttpRequest,你是如何使用它的?

标签: javascript asp.net-mvc cookies asp.net-mvc-5 shopping-cart


【解决方案1】:

我不知道 MessageBox.Show("....", MessageType.Error).Script 的实现是什么,但我假设它只是生成一个简单的 JavaScript 语句,如下所示:

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

所以你可以为结果添加这个标签:

<div id="CartItems">

</div>

现在可以正常使用了。

【讨论】:

    【解决方案2】:

    我所有的代码都是真的,我只是犯了一些简单的错误。

    我在布局中加载了一个 JQuery 文件,并且在我的视图中加载了另一个版本的 JQuery!我删除了其中一个。

    我还在局部视图中使用了这些代码并使用 Ajax 加载了它们,但我的局部视图无法将数据传递给 Controller ,我将代码移动到主视图 (GoodDetails.cshtml),现在它工作正常。

    【讨论】:

    • 在您的帮助下...谢谢亲爱的@FrebinFrancis :)
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多