Ich versuche, ein Array von Objekten mit der Funktion ajax () von jQuery an eine MVC-Controller-Methode zu übergeben. Wenn ich in die PassThing () C # -Controllermethode komme, ist das Argument "things" null. Ich habe versucht, dies mit einer Art Liste für das Argument zu tun, aber das funktioniert auch nicht. Was mache ich falsch?
<script type="text/javascript">
$(document).ready(function () {
var things = [
{ id: 1, color: 'yellow' },
{ id: 2, color: 'blue' },
{ id: 3, color: 'red' }
];
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: '/Xhr/ThingController/PassThing',
data: JSON.stringify(things)
});
});
</script>
public class ThingController : Controller
{
public void PassThing(Thing[] things)
{
// do stuff with things here...
}
public class Thing
{
public int id { get; set; }
public string color { get; set; }
}
}
c#
asp.net-mvc
jquery
Halcyon
quelle
quelle
Antworten:
Mit dem Vorschlag von NickW konnte ich dies zum Laufen bringen.
things = JSON.stringify({ 'things': things });
Hier ist der vollständige Code.Daraus habe ich zwei Dinge gelernt:
Die Einstellungen contentType und dataType sind in der Funktion ajax () unbedingt erforderlich. Es wird nicht funktionieren, wenn sie fehlen. Ich fand dies nach langem Ausprobieren heraus.
Verwenden Sie einfach das Format JSON.stringify ({'things': things}), um ein Array von Objekten an eine MVC-Controller-Methode zu übergeben.
Ich hoffe das hilft jemand anderem!
quelle
http://localhost:52459/Sales/completeSale?itemsInCart=[{"ItemId":1,"Quantity":"1","Price":3.5}]
undSales.completeSale
istpublic ActionResult completeSale(ItemInCart[] itemsInCart)
alsHttpGet
.data: JSON.stringify(things),
dataType
ist nicht nötig. Wenn es weggelassen wird, wird es von derKönntest du das nicht einfach machen?
... und markieren Sie Ihre Aktion mit
quelle
Formatieren Sie Ihre Daten, die möglicherweise das Problem sind. Versuchen Sie eines davon:
Oder (von Wie kann ich ein Array von Zeichenfolgen ohne Formular an ASP.NET MVC Controller senden? )
quelle
Ich verwende eine .Net Core 2.1-Webanwendung und konnte hier keine einzige Antwort zum Arbeiten erhalten. Ich habe entweder einen leeren Parameter (wenn die Methode überhaupt aufgerufen wurde) oder einen 500-Server-Fehler. Ich begann mit jeder möglichen Kombination von Antworten zu spielen und bekam schließlich ein funktionierendes Ergebnis.
In meinem Fall war die Lösung wie folgt:
Skript - Stringifizieren des ursprünglichen Arrays (ohne Verwendung einer benannten Eigenschaft)
Verwenden Sie in der Controller-Methode [FromBody].
Zu den Fehlern gehören:
Den Inhalt benennen
Daten: {Inhalt: Knoten}, // Serverfehler 500
Der contentType = Server-Fehler 500 ist nicht vorhanden
Anmerkungen
dataType
wird trotz einiger Antworten nicht benötigt, da dies für die Antwortdecodierung verwendet wird (daher für die Anforderung nicht relevant) hier ).List<Thing>
funktioniert auch in der Controller-Methodequelle
Ich habe die perfekte Antwort auf all das: Ich habe so viele Lösungen ausprobiert, die nicht in der Lage sind, mich selbst endgültig zu verwalten. Eine detaillierte Antwort finden Sie unten:
Controler
quelle
Die einzige Möglichkeit, dies zum Laufen zu bringen, besteht darin, den JSON als String zu übergeben und ihn dann mit zu deserialisieren
JavaScriptSerializer.Deserialize<T>(string input)
, was ziemlich seltsam ist, wenn dies der Standard-Deserializer für MVC 4 ist.Mein Modell verfügt über verschachtelte Objektlisten. Das Beste, was ich mit JSON-Daten erreichen kann, ist die oberste Liste mit der richtigen Anzahl von Elementen, aber alle Felder in den Elementen waren null.
So etwas sollte nicht so schwer sein.
quelle
Dies ist Arbeitscode für Ihre Abfrage, Sie können ihn verwenden.
Controler
Javascript
quelle
Das Umschließen Ihrer Objektliste mit einem anderen Objekt, das eine Eigenschaft enthält, die dem Namen des Parameters entspricht, der vom MVC-Controller erwartet wird, funktioniert. Das wichtige Bit ist der Wrapper um die Objektliste.
quelle
quelle
Wenn Sie die ASP.NET-Web-API verwenden, sollten Sie nur übergeben
data: JSON.stringify(things)
.Und Ihr Controller sollte ungefähr so aussehen:
quelle
Änderung von @veeresh i
quelle
Was ich getan habe, als ich versucht habe, einige Daten aus mehreren ausgewählten Zeilen in DataTable an die MVC-Aktion zu senden:
HTML Am Anfang einer Seite:
(Es wird nur eine Zeile angezeigt, vom Modell binden):
Schaltfläche zum Starten der JavaScript-Funktion:
JavaScript-Funktion:
MVC-Aktion:
Und MODELL in C #:
FAZIT:
Der Grund für ERROR:
Ist Attribut:
[ValidateAntiForgeryToken]
für die MVC-AktionStartWorkflow
Lösung in Ajax-Aufruf:
Um eine Liste von Objekten zu senden, müssen Sie Daten wie im Beispiel (Auffüllen eines Listenobjekts) und:
Daten: {Modell: Liste},
Typ: "Post",
quelle
So funktioniert es gut für mich:
Mit "ContentType" in Großbuchstaben "C".
quelle