J'ai trouvé une solution. J'utilise une solution de Steve Gentile, jQuery et ASP.NET MVC - envoi de JSON à une action - Revisité .
Mon code de vue ASP.NET MVC ressemble à ceci:
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);
}
});
};
et mon action de contrôleur est décorée avec un attribut personnalisé
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets
Le code de l'attribut personnalisé peut être trouvé ici (le lien est maintenant rompu).
Parce que le lien est rompu, c'est le code pour le 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 provient de Json.NET
Lien: sérialisation et désérialisation de JSON avec Json.NET
Filtres d'action, jquery stringify, bleh ...
Peter, cette fonctionnalité est native de MVC. C'est l'une des choses qui rend MVC si génial.
Et dans l'action,
Fonctionne comme un charme:
Si vous utilisez jQuery 1.4+, vous voulez vous pencher sur la configuration du mode traditionnel:
Comme décrit ici: http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/02/24/jquery-1-4-breaks-asp-net-mvc-actions-with-array-parameters
Cela fonctionne même pour les objets complexes. Si vous êtes intéressé, vous devriez consulter la documentation MVC sur la liaison de modèle: http://msdn.microsoft.com/en-us/library/dd410405.aspx
la source
In
.NET4.5
,MVC 5
pas besoin de widgets.Javascript:
objet dans JS:
mécanisme qui ne poste.
C #
Objets:
Manette:
Objet reçu:
J'espère que cela vous fera gagner du temps.
la source
Vers la seconde moitié de Create REST API utilisant ASP.NET MVC qui parle à la fois JSON et XML brut , pour citer:
Il implémente ensuite un filtre d'action qui mappe les objets JSON aux objets C # avec le code affiché.
la source
Téléchargez d'abord ce code JavaScript, JSON2.js , qui nous aidera à sérialiser l'objet en une chaîne.
Dans mon exemple, je poste les lignes d'un jqGrid via Ajax:
Maintenant sur le contrôleur:
Créez une classe JsonFilter (grâce à la référence JSC).
Créez une autre classe afin que le filtre puisse analyser la chaîne JSON en objet manipulable réel: Cette classe comissionsJS sont toutes les lignes de mon jqGrid.
J'espère que cet exemple vous aidera à illustrer comment publier un objet complexe.
la source
Oh mon Dieu. pas besoin de faire quelque chose de spécial. uniquement dans votre section de publication, procédez comme suit:
Dans le serveur, utilisez ceci:
ce lien vous aide à faire ...
la source
la source