2015-07-08 4 views
0

Я хочу, чтобы корзина для покупок ajax, GetCarts и AddCart работали, но приемник RemoveRow не - параметр «strms». Когда alert (strms) в функции removeRow (strms) js, он показывает правильное значение идентификатора книги (равное 8). Но в отладке CartController/RemoveRow значение strms равно NULL. Я думаю, что это может быть проблема с маршрутизацией, но я думаю, что мои настройки маршрутов правильные! Пожалуйста, помогите мне.Параметр контроллера не приемника, переданный ajax POST в .Net MVC

Точка зрения _Layout.cshtml, которые содержат код JS Контроллер CartController

Мои RouteConfig.cs

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Sach", action = "Detail", id = "7" } 
     ); 
     routes.MapRoute(
     "Cart", 
     "{controller}/{category}/{ms}/{sl}", 
     new { controller = "Cart", action = "AddCart", ms = UrlParameter.Optional, sl = UrlParameter.Optional } 
     ); 
     routes.MapRoute(
    "CartRemoveRow", 
    "{controller}/{action}/{ms}", 
     new { controller = "Cart", action = "RemoveRow", ms = UrlParameter.Optional }); 

    } 
} 

CartController.cs

public class CartController : Controller 
{ 
    List<CartItem> listCart; 
    [HttpPost] 
    public ActionResult GetCarts() 
    { 
     listCart = Cart.getCart(Session); 
     return PartialView("Cart", listCart); 
    } 

    public void AddCart(string ms, string sl) { 

     int masach = int.Parse(ms); 
     int soluong = int.Parse(sl); 
     Cart.AddCart(masach, soluong, Session); 
     //return PartialView("Default"); 
    } 
    public void RemoveRow(string strms) 
    { 
     int ms1 = int.Parse(strms); 
     var sach = new Sach() { MaSach = ms1 }; 
     Cart.removeCart(sach, true); 
    } 

} 

Ajax код расслоение плотной

<script type="text/javascript"> 
    function showCart() { 
     // alert("1"); 
     //Load content from CartController 
     $(function() { 
      //alert("2"); 
      $.ajax({ 
       type: "POST", 
       url: '@Url.Action("GetCarts", "Cart")', 
       success: function (data) { 
        var result = data;      
        $('#myCart').html(result); 
        //alert($('#myCart').html()); 

       } 
      }); 
     }); 
     $("#myCart").modal('show'); 
    }  

    function addCart(ms, sl) {    
     var masach = []; 
     masach.push(ms); 
     masach.push(sl);    
     // alert(masach); 
     $(function() { 
      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("AddCart", "Cart")/'+ms+'/'+ $("#soluong").val(),      
       success: function (data) { 
        showCart();       
       } 
      }); 
      return false; 
     });   
    } 

    function removeRow(strms){   
     $(function() { 
      // alert(strms); 
      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("RemoveRow", "Cart")/' + strms, 
       success: function (data) { 
        showCart(); 
       } 
      }); 
     }); 
    } 
</script> 

ответ

0

Переименуйте переменную javascript: «strms» в «ms», а затем отправьте ее, потому что на вашем маршруте «CartRemoveRow» вы получите переменную, объявленную с именем ms, а не «strms». И, конечно, в вашем контроллере переименуйте параметр в методе «RemoveRow» в «ms».

Или более короткий, изменить маршрут, чтобы принять «strms»:

routes.MapRoute(
    "CartRemoveRow", 
    "{controller}/{action}/{strms}", 
    new { controller = "Cart", action = "RemoveRow", strms = UrlParameter.Optional }); 
} 
0

попытаться передать параметр в свойстве данных, у меня есть несколько примеров, но не у себя дома прямо сейчас.

function removeRow(this_strms){   
    $(function() { 
     // alert(strms); 
     $.ajax({ 
      type: 'POST', 
      url: '@Url.Action("RemoveRow", "Cart")', 
      data: { strms: this_strms}, 
      success: function (data) { 
       showCart(); 
      } 
     }); 
    }); 
} 

Я обычно проходят C# объекты/классы в качестве параметров, как этот

public void RemoveRow(CartObject strms) 
{ 
    int ms1 = strms.ms1; 
    var sach = new Sach() { MaSach = ms1 }; 
    Cart.removeCart(sach, true); 
} 

в JS я сделать что-то вроде этого

var thisCartObject= { 
    ms1: 1, 
    otherproperty: 0.4, 
    otherproperty2: "Description" 
}; 


function removeRow(thisCartObject){   
    $(function() { 
     // alert(strms); 
     $.ajax({ 
      type: 'POST', 
      url: '@Url.Action("RemoveRow", "Cart")', 
      data: JSON.stringify({ strms: thisCartObject}), 
      contentType: 'application/json', 
      dataType: 'json', 
      success: function (data) { 
       showCart(); 
      } 
     }); 
    }); 
} 

Если вы собираетесь попробовать это, попробуйте без него! ваш пользовательский маршрут, определенный в классе RegisterRoutes.

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