Действия POST с тем же именем и разными параметрами [по умолчанию] не будут запускаться при вызове Ajax
В основном, у меня есть эти 2 действия:
[HttpPost]
[ActionName("ListarTodosGrupo")]
public ActionResult ListAllFromGroup(string wildcard = "", int registries = 10)
{
// ...
}
[HttpPost]
[ActionName("ListarTodosGrupo")]
public ActionResult ListAllFromGroup(string cnpj, string wildcard = "", int registries = 10)
{
// ...
}
Эти действия должны вызываться из вызова Ajax. То, что я пытаюсь сделать, - это вызывать различные действия в зависимости от аргументов вызова Ajax (данных). Например:
$.ajax({
url: "/Cliente/ListarTodosGrupo",
type: "post",
dataType: "json",
cache: true,
data: { // This should fire the first action
wildcard: $("input#nomeCliente").val(),
registries: 10
},
...
});
$.ajax({
url: "/Cliente/ListarTodosGrupo",
type: "post",
dataType: "json",
cache: true,
data: { // This should fire the second action
wildcard: $("input#nomeCliente").val(),
registries: 10,
cnpj: '02696818000116'
},
...
});
Тем не менее, он не работает (запускается только первое действие, несмотря на количество заданных параметров). Это вообще возможно? Как я могу это сделать?
2 ответа
[HttpPost]
[ActionName("ListarTodosGrupo")]
public ActionResult ListAllFromGroup(string wildcard = "", int registries = 10)
{
// ...
}
[HttpPost]
[ActionName("ListarTodosGrupo2")]
public ActionResult ListAllFromGroup(string cnpj, string wildcard = "", int registries = 10)
{
// ...
}
Не пробовал, но если вы можете изменить имя действия вашего второго метода на ListarTodosGrupo2, то вы можете вызвать метод post, используя ajax, как показано ниже.
$.ajax({
url: "/Cliente/ListarTodosGrupo",
type: "post",
dataType: "json",
cache: true,
data: { // This should fire the first action
wildcard: $("input#nomeCliente").val(),
registries: 10
},
...
});
$.ajax({
url: "/Cliente/ListarTodosGrupo2",
type: "post",
dataType: "json",
cache: true,
data: { // This should fire the second action
wildcard: $("input#nomeCliente").val(),
registries: 10,
cnpj: '02696818000116'
},
...
});
.NET MVC не принимает во внимание перегруженные методы при вызове действий, только имя метода и любые атрибуты http-глагола (например, HttpPost, HttpGet и т. Д.). Поэтому всегда будет вызываться только первый метод, независимо от того, какие данные вы ему отправили.
Вы должны переосмыслить свое решение. Самым простым изменением было бы использование одного открытого метода ListarTodosGrupos, который принимает все необходимые данные и по умолчанию для остальных устанавливается значение NULL, если это применимо, ofc). Вы создаете частные методы для различной функциональности. На основании данных, отправленных в ListarTodoGropus, вы можете заставить свой код вызывать нужный частный метод.