Ajax formulário serializar não liga ao usar vários parâmetros no controlador MVC

Eu tenho uma visão com várias inputs para o meu modelo (Html.TextBoxFor (x => x.attribute) etc. E meu método ajax é:

function callMethod() { $.ajax({ type: "POST", data: $('#Form').serialize() , url: '@Url.Action("formMethod", "Test")', }).done(function (newTable) { $('#RefundTableDiv').html(newTable); }); }; 

e isso funciona perfeitamente, o modelo vem perfeitamente para formMethod, mas quando eu mudo formMethod e adiciono outro parâmetro por exemplo ‘int test’ ele não funciona mais.

Meu método parece:

 function callMethod() { var number = 2; $.ajax({ type: "POST", data: {"model": $('#Form').serialize(), "test": number}, url: '@Url.Action("formMethod", "Test")', }).done(function (newTable) { $('#RefundTableDiv').html(newTable); }); }; 

o “teste”: número vem corretamente para o método no controlador, mas o modelo de repente é nulo agora?

O que estou fazendo de errado?

O uso de .serialize() serializa seu modelo como uma string de consulta (por exemplo someProperty=someValue&anotherProperty=anotherValue&... ). Para adicionar pares nome / valor adicionais, você pode append manualmente, por exemplo

 var data = $('#Form').serialize() + '&test=' + number; $.ajax({ .... data: data; 

ou use o método param () (útil se você tiver vários itens e / ou matrizes para adicionar)

  var data = $("#Form").serialize() + '&' + $.param({ test: number }, true); $.ajax({ .... data: data; 

você pode fazer assim:

 function callMethod() { var number = 2; var sd = $('#Form').serializeArray(); sd.push({ name:"test", value:number }); $.ajax({ type: "POST", data: sd, url: '@Url.Action("formMethod", "Test")', }).done(function (newTable) { $('#RefundTableDiv').html(newTable); }); };