Eu encontrei uma solução. Eu uso uma solução de Steve Gentile, jQuery e ASP.NET MVC - enviando JSON para um Action - Revisited .
Meu código de visualização ASP.NET MVC se parece com:
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);
}
});
};
e minha ação do controlador é decorada com um atributo personalizado
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets
O código para o atributo personalizado pode ser encontrado aqui (o link está quebrado agora).
Como o link está quebrado, este é o código para o 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 é de Json.NET
Link: serializando e desserializando JSON com Json.NET
Filtros de ação, jquery stringify, bleh ...
Peter, essa funcionalidade é nativa do MVC. Essa é uma das coisas que torna o MVC tão bom.
E na ação,
Funciona como um encanto:
Se você estiver usando jQuery 1.4+, então você deseja configurar o modo tradicional:
Conforme descrito aqui: http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/02/24/jquery-1-4-breaks-asp-net-mvc-actions-with-array-parameters
Isso funciona até mesmo para objetos complexos. Se estiver interessado, você deve consultar a documentação MVC sobre Model Binding: http://msdn.microsoft.com/en-us/library/dd410405.aspx
fonte
Em
.NET4.5
,MVC 5
não há necessidade de widgets.Javascript:
objeto em JS:
mecanismo que posta.
C #
Objetos:
Controlador:
Objeto recebido:
Espero que isso economize algum tempo.
fonte
Em direção à segunda metade de Criar API REST usando ASP.NET MVC que fala JSON e XML simples , para citar:
Ele então implementa um filtro de ação que mapeia o JSON para objetos C # com o código mostrado.
fonte
Primeiro baixe este código JavaScript, JSON2.js , que nos ajudará a serializar o objeto em uma string.
No meu exemplo, estou postando as linhas de um jqGrid via Ajax:
Agora no controlador:
Crie uma classe JsonFilter (graças à referência JSC).
Crie outra classe para que o filtro possa analisar a string JSON para o objeto manipulável real: Esta classe comissionsJS são todas as linhas do meu jqGrid.
Espero que este exemplo ajude a ilustrar como postar um objeto complexo.
fonte
Oh meu Deus. não precisa fazer nada de especial. apenas na sua seção de postagem, faça o seguinte:
No servidor, use isto:
este link ajuda você a fazer ...
fonte
fonte