Sou um programador web novato, então, por favor, me perdoe se meu "jargão" não estiver correto. Eu tenho um projeto usando ASP.NET usando a estrutura MVC3.
Estou trabalhando em uma visão de administrador em que o administrador modificará uma lista de equipamentos. Uma das funções é um botão "atualizar" que desejo usar jquery para editar dinamicamente a entrada na página da Web após enviar uma postagem para o controlador MVC.
Presumo que essa abordagem seja "segura" em uma única configuração de administrador em que haja uma preocupação mínima de a página da Web sair de sincronia com o banco de dados.
Eu criei uma visão fortemente tipada e esperava passar os dados do modelo para o controle MVC usando uma postagem AJAX.
No post a seguir, encontrei algo semelhante ao que estou procurando fazer: JQuery Ajax e ASP.NET MVC3 causando parâmetros nulos
Vou usar o exemplo de código da postagem acima.
Modelo:
public class AddressInfo
{
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string Country { get; set; }
}
Controlador:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Check(AddressInfo addressInfo)
{
return Json(new { success = true });
}
}
script na visualização:
<script type="text/javascript">
var ai = {
Address1: "423 Judy Road",
Address2: "1001",
City: "New York",
State: "NY",
ZipCode: "10301",
Country: "USA"
};
$.ajax({
url: '/home/check',
type: 'POST',
data: JSON.stringify(ai),
contentType: 'application/json; charset=utf-8',
success: function (data.success) {
alert(data);
},
error: function () {
alert("error");
}
});
</script>
Eu não tive a chance de usar o acima ainda. Mas eu queria saber se este era o "melhor" método para passar os dados do modelo de volta para o controle MVC usando AJAX.
Devo me preocupar em expor as informações do modelo?
fonte
Encontrei 3 maneiras de implementar isso:
Classe C #:
Açao:
JavaScript, você pode fazer isso de três maneiras:
1) String de consulta:
Os dados aqui são uma string.
"Address1=blah&Address2=blah&City=blah&State=blah&ZipCode=blah&Country=blah"
2) Matriz de objetos:
Os dados aqui são uma matriz de pares de chave / valor:
3) JSON:
Os dados aqui são uma string JSON serializada. Observe que o nome deve corresponder ao nome do parâmetro no servidor !!
fonte
data: $('input, textarea, select').serialize(),
para o meu funcionar.É assim que funcionou para mim:
fonte
o que você tem é bom - no entanto, para economizar um pouco de digitação, você pode simplesmente usar para seus dados
consulte http://www.ryancoughlin.com/2009/05/04/how-to-use-jquery-to-serialize-ajax-forms/ para obter detalhes, a sintaxe é bastante básica.
fonte
Se estiver usando MVC 5, leia esta solução!
Eu sei que a questão especificamente chamada para MVC 3, mas me deparei com esta página com MVC 5 e queria postar uma solução para qualquer outra pessoa na minha situação. Tentei as soluções acima, mas não funcionaram para mim, o filtro de ação nunca foi alcançado e não consegui descobrir o porquê. Estou usando a versão 5 em meu projeto e acabei com o seguinte filtro de ação:
- Anote o
using System.Web.Mvc
eusing System.Web.Mvc.Filters
, não ashttp
bibliotecas (acho que é uma das coisas que mudou com MVC v5. -Em seguida, basta aplicar o filtro
[ValidateJSONAntiForgeryHeader]
à sua ação (ou controlador) e ele deve ser chamado corretamente.Na minha página de layout logo acima
</body>
eu tenho@AntiForgery.GetHtml();
Finalmente, em minha página do Razor, faço a chamada ajax da seguinte maneira:
fonte
data: $("#the-form").serialize()
?