$ .getjson envia parâmetros nulos para o controlador MVC
-
20-09-2019 - |
Pergunta
Estou usando o método Getjson da JQuery para recuperar alguns dados de um controlador 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);
}
A idéia é que eu possa usar esse método do controlador para fornecer todos os contatos ou um determinado número de contatos se "número do" for fornecido.
O problema é que "número de" no meu controlador é sempre nulo quando envio a solicitação GET para "contatos/getContacts/5". No entanto, se eu enviar a solicitação GET para "Contatos/getContacts/? NumberOf = 5", ele funciona como esperado.
Se ajudar, aqui está o método 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>"
);
});
});
},
Solução
Você provavelmente tem um problema de roteamento - tente aplicar uma dessas duas correções:
(Fácil, mas talvez um pouco feio)
Renomear onumberOf
parâmetro paraid
, para permitir que ele seja apanhado pela rota padrão.(Um pouco mais de trabalho, mas seu código ficará melhor - pelo menos neste método)
Adicione a rota a seguir à sua rota Colleciton em global.asax.cs:routes.MapRoute( "ContactsRoute", "Contacts/GetContacts/{numberOf}", new { controller = "Contacts", action = "GetContacts", numberOf = null } );