C# Can';t使控制器的多个参数正常工作

C# Can';t使控制器的多个参数正常工作,c#,jquery,asp.net-mvc-3,parameters,controller,C#,Jquery,Asp.net Mvc 3,Parameters,Controller,以下是我眼中的jquery: $("#btnSelect1").click(function () { var donationTypeID = $(this).closest('p').find('#selectList').val(); var id = parseInt(donationTypeID); var id2 = $('#person').val(); var persId = parseInt(id2);

以下是我眼中的jquery:

 $("#btnSelect1").click(function () {
        var donationTypeID = $(this).closest('p').find('#selectList').val();
        var id = parseInt(donationTypeID);
        var id2 = $('#person').val();
        var persId = parseInt(id2);

        // var personName 
        var route = '/Donation/ContinueDonation/' + id + '?personId =' + persId;

        $("#donationSection1").load(route, function () {...});...
这里是控制器方法

 public ActionResult ContinueDonation(int id, int personId)
    {}

你有没有想过我该怎么做?感谢您没有为id值提供密钥:

var route = '/Donation/ContinueDonation/?id=' + id + '&personId =' + persId;


顺便说一句,
varpersid=parseInt(id2)行是多余的,因为HTTP发送的每个参数都是字符串,所以
“234”
234
完全相同。

我实际上认为前面的答案并不完全正确。如果查询字符串符合MVC建立的默认路由,则它是正确的,该路由与类似于{controller}/{action}/{id}的URL相匹配

真正应该做的是,你搞乱了路由,你的查询要么没有命中默认路由,要么你改变了它

我要做的是获取RoutedBugger(只需通过nuget获取),然后查看查询字符串所点击的路由。您可以为任何您想要的URL设置路由(友好URL的整个点),因此如果您想要路由为/ContinueGiving/{id}/{personId},您可以通过在路由的开头添加一个路由来实现,该路由的定义如下:


routes.MapRoute(
    name: "ContinueDonation",
    url: "ContinueGiving/{id}/{personId}",
    defaults: new { controller = "Donation", action = "ContinueDonation" },
    constraints: new { id = @"\d+", personId = @"\d+" }
);
如果框架可以在发布的值、查询字符串等中找到任何匹配项,则未指定的任何参数都将被映射

这些约束确保仅当传递的参数是数字时,此路由才会匹配


因此,前面的答案是有效的,因为id为的路由不匹配,但这不是您真正的问题。

@redBarron此格式适用于所有参数。