以下是我认为的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)
{}
有关如何让它发挥作用的任何想法?感谢
答案 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的路线不匹配,但这不是你的问题。