Cómo enviar un modelo en jQuery $ .ajax () post solicitud al método de controlador MVC

Al hacer una actualización automática usando el siguiente código, asumí que cuando hago una publicación, el modelo se enviará automáticamente al controlador:

$.ajax({ url: '', type: "POST", //data: ?????? success: function(result) { $("div#updatePane").html(result); }, complete: function() { $('form').onsubmit({ preventDefault: function() { } }); } }); 

Cada vez que hay una publicación, necesito incrementar el atributo de valor en el modelo:

 public ActionResult Modelpage(MyModel model) { model.value = model.value + 1; return PartialView("ModelPartialView", this.ViewData); } 

Pero el modelo no se pasa al controlador cuando la página se publica con una solicitud jQuery AJAX. ¿Cómo puedo enviar el modelo en la solicitud de AJAX?

La respuesta simple (en MVC 3 en adelante, tal vez incluso 2) es que no tienes que hacer nada especial.

Siempre que sus parámetros JSON coincidan con el modelo, MVC es lo suficientemente inteligente como para construir un nuevo objeto a partir de los parámetros que le asigna. Los parámetros que no están ahí solo están predeterminados.

Por ejemplo, el Javascript:

 var values = { "Name": "Chris", "Color": "Green" } $.post("@Url.Action("Update")",values,function(data) { // do stuff; }); 

El modelo:

 public class UserModel { public string Name { get;set; } public string Color { get;set; } public IEnumerable Contacts { get;set; } } 

El controlador:

 public ActionResult Update(UserModel model) { // do something with the model return Json(new { success = true }); } 

Si necesita enviar el modelo COMPLETO al controlador, primero necesita que el modelo esté disponible para su código de JavaScript.

En nuestra aplicación, hacemos esto con un método de extensión:

 public static class JsonExtensions { public static string ToJson(this Object obj) { return new JavaScriptSerializer().Serialize(obj); } } 

En la vista, lo usamos para representar el modelo:

  

A continuación, puede pasar la variable de modelo a su llamada $ .ajax.

Tengo una página de MVC que envía JSON de los valores seleccionados de un grupo de botones de opción.

Yo suelo:

 var dataArray = $.makeArray($("input[type=radio]").serializeArray()); 

Para hacer una matriz de sus nombres y valores. Luego lo convierto a JSON con:

 var json = $.toJSON(dataArray) 

y luego publícalo con jQuery’s ajax () en el controlador MVC

 $.ajax({ url: "/Rounding.aspx/Round/" + $("#OfferId").val(), type: 'POST', dataType: 'html', data: json, contentType: 'application/json; charset=utf-8', beforeSend: doSubmitBeforeSend, complete: doSubmitComplete, success: doSubmitSuccess}); 

Que envía los datos como datos JSON nativos.

A continuación, puede capturar la secuencia de respuesta y deserializarla en el objeto nativo C # / VB.net y manipularla en su controlador.

Para automatizar este proceso de una manera adorable y de bajo mantenimiento, le aconsejo que lea esta entrada que explica bastante bien la deserialización automática nativa de JSON.

Haga coincidir su objeto JSON para que coincida con su modelo y el siguiente proceso vinculado debe deserializar automáticamente los datos en su controlador. Es maravilloso para mí.

Artículo sobre la deserialización MVC JSON

Esto se puede hacer construyendo un objeto javascript para que coincida con su modelo mvc. Los nombres de las propiedades de JavaScript tienen que coincidir exactamente con el modelo de mvc o, de lo contrario, el autobind no se realizará en la publicación. Una vez que tenga su modelo en el lado del servidor, puede manipularlo y almacenar los datos en la base de datos.

Estoy logrando esto mediante un evento de doble clic en una fila de la grilla o haciendo clic en un evento de algún tipo.

 @model TestProject.Models.TestModel  //This is your controller action on the server, and it will autobind your values //to the newTestModel on post. [HttpPost] public ActionResult TestModelUpdate(TestModel newTestModel) { TestModel.UpdateTestModel(newTestModel); return //do some return action; } 

Creo que necesitas pasar explícitamente el atributo de datos. Una forma de hacerlo es usar data = $ (‘# your-form-id’). Serialize ();

Esta publicación puede ser útil. Publicar con jquery y ajax

Eche un vistazo al documento aquí .. Ajax serialize

puedes crear una variable y enviarla a ajax.

 var m = { "Value": @Model.Value } $.ajax({ url: '<%=Url.Action("ModelPage")%>', type: "POST", data: m, success: function(result) { $("div#updatePane").html(result); }, complete: function() { $('form').onsubmit({ preventDefault: function() { } }); } }); 

Todo el campo del modelo debe estar en m.

En la llamada ajax mencionar

 data:MakeModel(), 

utilice la función siguiente para vincular los datos al modelo

 function MakeModel() { var MyModel = {}; MyModel.value = $('#input element id').val() or your value; return JSON.stringify(MyModel); } 

Adjunte el atributo [HttpPost] a su acción de controlador

en POST esta información estará disponible