2016-11-25 14 views
0

これまでカートに商品を追加するときにポストバックなしでサイトを反応させました(は、Product.IdをJQueryのクッキーに追加します)。ポストバックなしでウェブサイトを反応させるには?

ユーザーがCart/Checkoutページにアクセスすると、コントローラのCookieからすべてIdを読み込み、すべてのレコードをcartListに入れて、それをビューに渡します。

私はカートから製品を取り除きたいときにポストバックなしでそれを解決する方法を知らないので、私は立ち往生しています。ビューの

cartList.Remove(db.Products.SingleOrDefault(x=> x.Id == /*Id to remove from cart*/)); 

は、それは次のように対応する/似た何かをすることは可能ですか?

マイコード:

は、私はjQueryを使ってクッキーにProduct.Idを追加(は、foreachループからIDdata-id="@item.ID"を取得します):

$('.add-to-cart').click(function() { 

    if ($.cookie("AddedProductId") != null) { 
     var previousValues = $.cookie("AddedProductId"); 
     $.cookie("AddedProductId", previousValues + '_' + $(this).data('id')); 
    }else{ 
     $.cookie("AddedProductId", $(this).data('id')); 
    } 
}); 

これは私が追加の製品とcartListを維持する方法です、カート/チェックアウトページにアクセスしたときの内部コントローラ:

public ActionResult Cart(){ 

     var cart = Request.Cookies["AddedProductId"].Value; 

     String[] elements = Regex.Split(cart, "_");   
     List<Product> cartList = new List<Product>(); 

     foreach (var item in elements){ 
      cartList.Add(db.Products.SingleOrDefault(x => x.ID == new Guid(item))); 
     }  
     return View(cartList); 
} 

foreachループ内にすべて/Cart/Viewを表示します。

これをAsp.Net MVCで解決する最適な方法は何ですか?

答えて

0

responsive websitepostbackは異なるものです。あなたの質問に答える

、AJAXリクエストは、コントローラの追加ソリューション

です:

[HttpPost] 
public JsonResult Remove(Guid id) 
{  
    cartList.RemoveAll(p => p.ID.Equals(id)); 

    return Json(new { removed = true }); 
} 

jqueryの:

$.ajax({ 
      url: '/Cart/Remove', 
      type: 'POST', 
      dataType: 'json', 
      data: { id: <here selected ID> }, 
      success: function (json) { 
       if(json.removed) { 
        // your code... 
       } 

      } 
     }); 
+0

私はそれを動作させることができない、私もにブレークポイントを設定私のコントローラとそれは 'Remove'メソッドには向いていません。これは正しく行われます: 'data:$(this).data( 'id')'?私は "//あなたのコード..."の部分に何を入れると思いますか? – fagol

+0

'@ Url.Action(" Remove "、" Cart ")'メソッドを使用すると、これは正しいパスを返します。 アプリケーションが[アプリケーションパス](https://msdn.microsoft.com/en-us/library/system.web.httprequest.applicationpath(v = vs.110).aspx)で構成されている可能性があります。 '// your code'には、正しい方法で削除された場合に実行されるアクションがあります。 – karritos

+0

ありがとうございます! – fagol

関連する問題