【问题标题】:Can't get multiple parameters to controller to work无法让控制器工作的多个参数
【发布时间】:2012-05-05 21:59:05
【问题描述】:

这是我认为的 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)
    {}

关于如何让它发挥作用有什么想法吗?谢谢

【问题讨论】:

    标签: c# jquery asp.net-mvc-3 parameters controller


    【解决方案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 的路由不匹配,但这不是你的问题。

    【讨论】:

      【解决方案2】:

      您没有提供 id 值的键:

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

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

      【讨论】:

      • @redBarron 这种格式适用于每个参数数量。
      猜你喜欢
      • 2015-12-06
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多