2

我在 ASP.NET MVC3 中有一个视图,它调用 AsyncController 以获取部分视图。我还想将一些数据作为 JSON 字符串设置为我可以从 jQuery 读取的 cookie。

这是我的观点:

$.ajax({
    type: "POST",
    url: '/ProductAsync/GetProductData',
    data: JSON.stringify({
        Product: thisProduct
    }),
    contentType: "application/json; charset=utf-8",
    success: function (returndata) {

        $('div#' + thisProduct).empty().html(returndata);

        var productDataJson = $.cookie(thisProduct + "-ProductData");
        alert(productDataJson);

    }
}); 

这是我的 AsyncControlleraction:

public class ProductAsyncController : AsyncController
{
    [HttpPost]
    public ActionResult GetProductData(string Product)
    {
        ProductData model = ProductModel.GetProductData(Product);
        Response.Cookies.Add(new HttpCookie(Product+"-ProductData", (new JavaScriptSerializer()).Serialize(model)));
        return PartialView("~/Views/Product/_ProductData.cshtml", model);
    }
}

我知道模型按预期返回到视图。部分的 HTML 显示得很好。但似乎cookie没有被设置:

Response.Cookies.Add(new HttpCookie(Product+"-ProductData", (new JavaScriptSerializer()).Serialize(model)));

我在浏览器的 cookie 存储位置和alert()节目中看不到 cookie null。我知道它JavaScriptSerializer正在工作:我通过将字符串放入 ViewData 并将其显示在页面上进行了测试。

我在设置 cookie 方面做错了什么?

4

1 回答 1

1

您可以在 cookie 中存储的数据量存在限制(该数量因浏览器和浏览器版本而异)。

正如我们在上面的评论中确定的那样,设置一个小值似乎是可行的,因此 cookie 中大值的序列化可能是问题所在。

@Iain 关于 cookie 大小限制的回答https://stackoverflow.com/a/4604212/6144似乎相当明确,所以我建议保持在他在那里指出的限制范围内,但要点是:

“在这个问题上,如果你想支持大多数浏览器,那么每个域不要超过 50 个 cookie,每个域不超过 4093 个字节。也就是说,所有 cookie 的大小不应超过 4093 个字节。”

于 2013-09-28T01:38:56.060 回答