我正在使用JQuery的getJSON方法从MVC控制器中检索一些数据。
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetContacts(int? numberOf)
{
List<Contact> contacts =
(numberOf != null && numberOf > 0) ?
_provider.GetContacts(Convert.ToInt32(numberOf)):
_provider.GetContacts();
return Json(contacts);
}
我的想法是,如果提供“numberOf”,我可以使用此控制器方法提供所有联系人或给定数量的联系人。
问题是当我将GET请求发送到“Contacts / GetContacts / 5”时,我的控制器中的“numberOf”始终为null。但是,如果我将GET请求发送到“Contacts / GetContacts /?numberOf = 5”,它将按预期工作。
如果有帮助,这是javascript方法:
getContacts: function(numberOf){
var path = "/Contact/GetContacts/";
path = (numberOf<=0) ? path : "/Contact/GetContacts/" + numberOf;
$.getJSON(path, null,
function(json){
$.each(json, function(){
$('tbody','#contacts').append(
"<tr id=\"contact-"+ this.Id +"\">"
+ "<td>"+ this.Id +"</td>"
+ "<td>"+ this.FirstName +"</td>"
+ "<td>"+ this.LastName +"</td>"
+ "</tr>"
);
});
});
},
答案 0 :(得分:2)
您可能遇到路由问题 - 请尝试应用以下两种方法之一:
(容易但可能有点难看)
将numberOf
参数重命名为id
,以使其能够被默认路由选中。
(多一点工作,但你的代码看起来会更好 - 至少在这种方法中)
将以下路由添加到global.asax.cs中的路由集合中:
routes.MapRoute(
"ContactsRoute",
"Contacts/GetContacts/{numberOf}",
new { controller = "Contacts", action = "GetContacts", numberOf = null }
);