Ich habe eine Lösung gefunden. Ich verwende eine Lösung von Steve Gentile, jQuery und ASP.NET MVC, die JSON an eine überarbeitete Aktion sendet .
Mein ASP.NET MVC-Ansichtscode sieht folgendermaßen aus:
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);
}
});
};
und meine Controller-Aktion ist mit einem benutzerdefinierten Attribut versehen
[JsonFilter(Param = "widgets", JsonDataType = typeof(List<PageDesignWidget>))]
public JsonResult SaveOrUpdate(List<PageDesignWidget> widgets
Code für das benutzerdefinierte Attribut finden Sie hier (der Link ist jetzt defekt).
Da die Verbindung unterbrochen ist, ist dies der Code für das 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 stammt von Json.NET
Link: Serialisieren und Deserialisieren von JSON mit Json.NET
Aktionsfilter, jquery stringify, bleh ...
Peter, diese Funktionalität ist in MVC integriert. Das ist eines der Dinge, die MVC so großartig machen.
Und in der Aktion,
Klappt wunderbar:
Wenn Sie jQuery 1.4+ verwenden, sollten Sie die Einstellung des traditionellen Modus untersuchen:
Wie hier beschrieben: http://www.dovetailsoftware.com/blogs/kmiller/archive/2010/02/24/jquery-1-4-breaks-asp-net-mvc-actions-with-array-parameters
Dies funktioniert sogar bei komplexen Objekten. Wenn Sie interessiert sind, sollten Sie die MVC-Dokumentation zur Modellbindung lesen: http://msdn.microsoft.com/en-us/library/dd410405.aspx
quelle
In
.NET4.5
,MVC 5
keine Notwendigkeit für Widgets.Javascript:
Objekt in JS:
Mechanismus, der postet.
C #
Objekte:
Regler:
Objekt erhalten:
Hoffe das spart dir etwas Zeit.
quelle
In der zweiten Hälfte von Create REST API mit ASP.NET MVC, das sowohl JSON als auch einfaches XML spricht , um Folgendes zu zitieren:
Anschließend implementiert er einen Aktionsfilter, der den JSON C # -Objekten mit angezeigtem Code zuordnet.
quelle
Laden Sie zuerst diesen JavaScript-Code JSON2.js herunter, mit dessen Hilfe wir das Objekt in eine Zeichenfolge serialisieren können.
In meinem Beispiel poste ich die Zeilen eines jqGrid über Ajax:
Jetzt auf dem Controller:
Erstellen Sie eine JsonFilter-Klasse (dank JSC-Referenz).
Erstellen Sie eine weitere Klasse, damit der Filter die JSON-Zeichenfolge auf das tatsächlich manipulierbare Objekt analysieren kann: Diese Klasse comissionsJS sind alle Zeilen meines jqGrid.
Ich hoffe, dieses Beispiel hilft zu veranschaulichen, wie ein komplexes Objekt gepostet wird.
quelle
Oh mein Gott. Ich muss nichts Besonderes tun. Gehen Sie in Ihrem Post-Bereich wie folgt vor:
Verwenden Sie im Server Folgendes:
Dieser Link hilft Ihnen dabei ...
quelle
quelle