1

セッションを使用してショッピングカートを実装しています。カートへの追加はうまくいっているようですが、カートからアイテムを削除すると問題が発生します。ブラウザの戻るボタンを使用して前のページに戻り、カート ページに戻ると、以前に削除したアイテムが再び表示されます。もちろん、すべてのMVCプロジェクトへのキャッシュを無効にする解決策があることがわかりましたが、これは望ましくありません。他の解決策は、カートをデータベースに保存することですが、匿名ユーザーがショッピングカートを持つことを許可しているため、それは良い解決策ではありません。これは、ショッピング カート ビューのコードの一部です。

   @model Project.Model.ShoppingCart

     foreach (var item in Model._linecollection)
         {
            var totalForProduct=((item.Product.Price / 100.0)*item.Quantity);
            total+=totalForProduct;
        <tr>
            <td>@item.Product.Name</td>
            <td><input class=input-mini type="number" value="@item.Quantity" /></td>
            <td>@(item.Product.Price / 100.0) </td>
             <td>@totalForProduct</td>
             <td>

                @using(Html.BeginForm("RemoveFromCart","Cart",FormMethod.Post,new {@id="form"}))
                {
                <input type="hidden" name="productId" value="@item.Product.Id" class="pToDelete">
                    <button type="submit" class="deleteFromCart">Delete</button>
                }

            </td>
        </tr>
4

1 に答える 1

4

このため、カート ページのキャッシュを無効にしたいと考えています。

次のクラスを使用して、MVCでそれを行うことができます...

public class NoCacheAttribute : ActionFilterAttribute
{  
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }
}

次に、コントローラーのメソッドに適用できます...

[NoCache]
public ActionResult Cart()
{
    ...
}

または、MVC 3以降では、このような組み込みのOutputCache属性を使用してキャッシュを無効にできると信じています...

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")] 
public ActionResult Cart()
{
    ...
}
于 2013-04-25T23:18:55.790 に答える