2012-05-05 35 views
1

下面是從我的觀點了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) 
    {} 

我如何能得到這個工作有什麼想法?由於

回答

1

我其實認爲以前的答案並不全是對的。你的查詢字符串是正確的,如果它擊中由MVC建立的默認路由匹配一個像這樣的{控制器}/{動作}/{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的路線不匹配,但這不是你的問題。

+0

謝謝。這有助於很多。 – 1Canuck16

1

你沒有給一個關鍵的id值:

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

BTW,該var persId = parseInt(id2);線是多餘的,與HTTP發送的每一個參數是一個字符串,所以"234"234是一模一樣。

+0

k謝謝...我不需要嗎?或者在personID之前? – 1Canuck16

+1

@redBarron。是的,我忘了,現在更新。 – gdoron

+0

這應該與更多的參數?如果我想要3? – 1Canuck16