2016-11-25 2 views
0

До сих пор я сделал свой сайт отзывчивым без обратной передачи при добавлении продуктов в корзину (добавляет Product.Id в файл cookie с JQuery).Как сделать сайт отзывчивым без обратной передачи?

Когда пользователь заходит на страницу «Корзина/Оформить покупку», я прочитал все файлы Id из файла cookie в контроллерах и поместил все записи в cartList и передал их в Вид.

Теперь я застрял, поскольку не знаю, как его решить без обратной передачи, когда я хочу удалить продукт из корзины.

Можно ли сделать что-то подобное /, соответствующие как:

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

в View?

Мой код:

Я добавил Product.Id в печенье с JQuery (получает идентификаторdata-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

A responsive website и postback - это разные вещи.

Отвечая на ваш вопрос, мы Аякса запрос является решением

в контроллере оных:

[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

Я не могу заставить его работать, я даже установить точку останова мой контроллер, и он не будет использовать метод «Удалить». Также это правильно сделано: 'data: $ (this) .data ('id')'? Что, я полагаю, вставить часть '' ваш код ... '? – fagol

+0

Используйте метод '@ Url.Action (« Удалить »,« Корзина »), это вернет вам правильный путь, который вы должны использовать. Возможно, ваше приложение настроено на [путь к программе] (https://msdn.microsoft.com/en-us/library/system.web.httprequest.applicationpath (v = vs.110) .aspx). В '// ваш код', это действия, которые будут выполняться, если он будет устранен правильным способом. – karritos

+0

Спасибо, что он работает сейчас! – fagol

Смежные вопросы