2012-03-03 4 views
0

У меня есть это:Почему мой пост ajax не заменяет содержимое?

<div id="miniShoppingCartContainer"> 
     @Html.Action("MiniShoppingCart", "ShoppingCart") 
</div> 

, где действие MiniShoppingCart возвращает MiniShoppingCart.cshtml частичный вид со всем содержимым.

В этом частичном виде я добавил АЯКС призыва к увеличению количества корзины товаров:

@using (Ajax.BeginForm("IncreaseProductQuantity", "ShoppingCart", new { shoppingCartItemId = item.Id }, new AjaxOptions { UpdateTargetId = "miniShoppingCartContainer", InsertionMode = InsertionMode.Replace })) 
{ 
    <li> 
     <input type="submit" class="btn-up" /> 
    </li> 
} 

, который вызывает метод:

public ActionResult IncreaseProductQuantity(int shoppingCartItemId) 
    { 
     //get shopping cart item 
     var cart = _workContext.CurrentCustomer.ShoppingCartItems 
      .Where(x => x.ShoppingCartType == ShoppingCartType.ShoppingCart).ToList(); 
     var sci = cart.Where(x => x.Id == shoppingCartItemId).FirstOrDefault(); 
     if (sci == null) 
     { 
      return RedirectToRoute("ShoppingCart"); 
     } 

     //update the cart item 
     _shoppingCartService.UpdateShoppingCartItem(_workContext.CurrentCustomer, 
           sci.Id, sci.Quantity + 1, true); 


     return MiniShoppingCart(); 
    } 

Обратите внимание, что в конце этого метода я вызов MiniShoppingCart ActionResult, который подготавливает корзину и возвращает PartialView (как вы видите в начале сообщения).

Ну, обновление продукта происходит хорошо, но содержание не обновляется (или заменен) ...

Можете ли вы указать, где я не прав?

UPDATE:

Ведение проверки с Chrome Dev. Инструменты я вижу ошибку, когда делают запись:

POST http://localhost/ShoppingCart/IncreaseProductQuantity?shoppingCartItemId=11 500 (Internal Server Error) 
f.support.ajax.f.ajaxTransport.sendjquery-1.7.1.min.js:4 
f.extend.ajaxjquery-1.7.1.min.js:4 
ejquery.unobtrusive-ajax.min.js:5 
(anonymous function)jquery.unobtrusive-ajax.min.js:5 
f.event.dispatchjquery-1.7.1.min.js:3 
f.event.add.h.handle.ijquery-1.7.1.min.js:3 
2 

Это странно предположить, что проблема из этого журнала ... В принципе, если я делаю отладки я могу видеть, что она делает все операции до return PartialView(model); из MiniShoppingCart() метода ...

+0

У вас есть ненавязчивый Аякс файл расслоения плотной ' 'в вашем представлении/макете? – nemesv

+0

Да, у меня есть это: '' –

+0

Вы должны проверить в консоли разработчика браузера (IE/Chrome F12) или в FireBug, что возвращает 'IncreaseProductQuantity'. Может быть, вы увидите намек на то, что не работает. – nemesv

ответ

0

Издание найдено:

>The partial view 'IncreaseProductQuantity' was not found or no view engine supports the searched locations. 

Так в основном, делают return MiniShoppingCart(); от IncreaseProductQuantity метода не автоматически возвращает частичный вид MiniShoppingCart, но по-прежнему будет пытаться вернуть IncreaseProductQuantity частичный вид, который, конечно, не существует.

Следовательно, я сделал это нравится:

var model = PrepareMiniShoppingCartModel(); 
return PartialView("MiniShoppingCart", model); 
Смежные вопросы