无法获得多个参数让控制器工作

时间:2012-05-05 21:59:06

标签: 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);

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

        $("#donationSection1").load(route, function () {...});...

这是控制器方法

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

有关如何让它发挥作用的任何想法?感谢

2 个答案:

答案 0 :(得分:1)

你没有给id值的密钥:

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

顺便说一句,var persId = parseInt(id2);行是多余的,因为使用HTTP发送的每个参数都是一个字符串,因此"234"234完全相同。

答案 1 :(得分:1)

我实际上认为以前的答案并不是那么正确。如果您的查询字符串符合MVC建立的默认路由,则该查询字符串是正确的,该路由与此{controller} / {action} / {id}之类的URL匹配。

真正发生的事情是你弄乱了路线,而你的查询要么没有达到默认路线,要么你改变了。

我要做的是获取RouteDebugger(只需通过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的路线不匹配,但这不是你的问题。