控制器方法使用自定义参数名称

时间:2017-04-30 16:18:28

标签: c# asp.net-mvc-5

我在asp.net MVC控制器的方法中使用自定义参数名称而不是// POST: Admin/Pages/ReorderPages [HttpPost] public void ReorderPages(int[] id) { using (Db db = new Db()) { //Set Initial count int count = 1; //Declare PageDTO PageDTO dto; //Set sorting for each page foreach (var pageId in id) { dto = db.Pages.Find(pageId); dto.Sorting = count; db.SaveChanges(); count++; } } } 时出现问题。

我的工作方法是:

$("table#pages tbody").sortable({
            items: "tr:not(.home)",
            placeholder: "ui-state-highlight",
            update: function () {
                var pageids = $("table#pages tbody").sortable("serialize");                    
                var url = "/Admin/Pages/ReorderPages";

                $.post(url, pageids, function (data) {

                });
            }

        });

我的ajax电话是:

id

现在,当我使用不同的param而不是null时,我在param中得到routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name:"CustomRoute", url:"{controller}/{action}/{ids}", defaults:new { controller = "Pages", action = "ReorderPages" } ); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); 值。我还添加了新的路线,如下所示:但问题仍然存在。

Q

我花了很多时间研究,但找不到确切的解决方案。

1 个答案:

答案 0 :(得分:0)

为什么不使用

var pageids = $("table#pages tbody").sortable("serialize");
$.ajax({
    url: "/Admin/Pages/ReorderPages",
    data: { id: pageids }
})
.done(function(response) {
    alert("works");
});
.fail(function(response){
    alert("failed because of..");
}

查看Ajax来电和承诺。它的工作非常好,这种方式无需使用路由。如果仍未通过ID,那么您debug通过您的代码,但在这种情况下,问题出在var pageids = var pageids = $("table#pages tbody").sortable("serialize");

如果你真的想坚持自己的方式。使用此

$.post(url, { newParameter : pageids }, function (data)

在此之后,您可以在ActionMethod

中重命名参数
public void ReorderPages(int[] newParameter)