Encontré una solución. Utilizo una solución de Steve Gentile, jQuery y ASP.NET MVC: envío de JSON a una acción: revisado .
Mi código de vista ASP.NET MVC se ve así:
function getplaceholders() {
var placeholders = $('.ui-sortable');
var results = new Array();
placeholders.each(function() {
var ph = $(this).attr('id');
var sections = $(this).find('.sort');
var section;
sections.each(function(i, item) {
var sid = $(item).attr('id');
var o = { 'SectionId': sid, 'Placeholder': ph, 'Position': i };
results.push(o);
});
});
var postData = { widgets: results };
var widgets = results;
$.ajax({
url: '/portal/Designer.mvc/SaveOrUpdate',
type: 'POST',
dataType: 'json',
data: $.toJSON(widgets),
contentType: 'application/json; charset=utf-8',
success: function(result) {
alert(result.Result);
}
});
};
y la acción de mi controlador está decorada con un atributo personalizado
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets
El código para el atributo personalizado se puede encontrar aquí (el enlace ahora está roto).
Debido a que el enlace está roto, este es el código para JsonFilterAttribute
public class JsonFilter : ActionFilterAttribute
{
public string Param { get; set; }
public Type JsonDataType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.ContentType.Contains("application/json"))
{
string inputContent;
using (var sr = new StreamReader(filterContext.HttpContext.Request.InputStream))
{
inputContent = sr.ReadToEnd();
}
var result = JsonConvert.DeserializeObject(inputContent, JsonDataType);
filterContext.ActionParameters[Param] = result;
}
}
}
JsonConvert.DeserializeObject es de Json.NET
Enlace: serializar y deserializar JSON con Json.NET
Filtros de acción, jquery stringify, bleh ...
Peter, esta funcionalidad es nativa de MVC. Esa es una de las cosas que hace que MVC sea tan grandioso.
Y en la accion
Funciona de maravilla:
Si está usando jQuery 1.4+, entonces desea considerar la configuración del modo tradicional:
Como se describe aquí: http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/02/24/jquery-1-4-breaks-asp-net-mvc-actions-with-array-parameters
Esto incluso funciona para objetos complejos. Si está interesado, debe consultar la documentación de MVC sobre Model Binding: http://msdn.microsoft.com/en-us/library/dd410405.aspx
fuente
En
.NET4.5
,MVC 5
no hay necesidad de widgets.Javascript:
objeto en JS:
mecanismo que hace publicar.
C#
Objetos:
Controlador:
Objeto recibido:
Espero que esto te ahorre algo de tiempo.
fuente
Hacia la segunda mitad de Create REST API usando ASP.NET MVC que habla tanto JSON como XML simple , para citar:
Luego implementa un filtro de acción que mapea el JSON a objetos C # con el código mostrado.
fuente
Primero descargue este código JavaScript, JSON2.js , que nos ayudará a serializar el objeto en una cadena.
En mi ejemplo, estoy publicando las filas de un jqGrid a través de Ajax:
Ahora en el controlador:
Cree una clase JsonFilter (gracias a la referencia JSC).
Cree otra clase para que el filtro pueda analizar la cadena JSON hasta el objeto manipulable real: esta clase comissionsJS son todas las filas de mi jqGrid.
Espero que este ejemplo ayude a ilustrar cómo publicar un objeto complejo.
fuente
Oh Dios mío. No es necesario hacer nada especial. solo en tu sección de publicaciones haz lo siguiente:
En el servidor usa esto:
este enlace te ayudará a hacerlo ...
fuente
fuente