2016-04-02 2 views
1

Ich habe eine Situation, wo ich Daten von Ajax Anruf erhalte. Ich möchte eine Aktionsmethode aufrufen und Daten als Argumente übergeben. Die an die Aktionsmethode übergebenen Daten sollten den Objekteigenschaften in der Parameterliste zugeordnet werden. Hier ist meine Klasse, die FullQuestion heißt.Wie komplexe JSON-Objekt in Mvc-Aktionsmethode übergeben?

public class FullQuestion : Question 
{ 
    public string Title { get; set; } 
    public string Content { get; set; } 
    public List<Tag> Tags { get; set; } 
} 

Hier ist meine Ajax-Aufruf Methode

var finalTagResultText = {Title: "title", Content: "content",Tag: { tagName: "tname", tagDescription: "tdesc"},Tag: { tagName: "tname1", tagDescription: "tdesc1"}}; 
$.ajax({ 
    url: '@Url.Action("AskQuestion", "Dashboard")', 
    type: "POST", 
    data: JSON.stringify(finalTagResultText), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(result) { 
     window.location.href = "@Url.Action("Questions", "Dashboard")"; 
    } 
}); 

Hier ist meine Aktionsmethode.

[HttpPost] 
[ActionName("AskQuestion")] 
public void AskQuestion_Post(FullQuestion question) 
{ 
} 

Ich möchte das JSON-Objekt als FullQuestion-Objekt übergeben erhalten. Ich benutzte json2-Bibliothek, um von der Stingify-Methode Gebrauch zu machen. Ich bekomme den Titel und den Inhalt Text aber kein Tag-Objekt. Irgendeine Idee, wie kann ich das erreichen? Danke im Voraus.

Antwort

1

Ihre Sammlung Eigenschaft ist Tags genannt (nicht Tag) und seit seiner einer Sammlung, müssen Sie eine Reihe von Tag Objekten zu übergeben, zum Beispiel

var finalTagResultText = { .... , Tags: [{ tagName: "tname", tagDescription: "tdesc"}, { tagName: "tname1", tagDescription: "tdesc1"}]}` 

Randbemerkung: Ihr Ajax-Erfolg Rückruf zu einem anderen wird umgeleitet Seite, in diesem Fall, verwenden Sie keine Ajax, um Ihre Daten zu übermitteln. Der ganze Sinn von Ajax besteht darin, auf derselben Seite zu bleiben. Sie wären besser dran, wenn Sie einfach einen Standard-Submit-Befehl verwenden und einen RedirectToAction() in Ihrer POST-Methode verwenden.

+0

Danke für Ihre Hilfe Menschen. Es hat mein Problem gelöst. In Bezug auf den Rat, ich weiß, dass Posting-Daten mit Ajax Anruf wahrscheinlich nicht der beste Weg ist, aber ich habe eine Situation, wo meine Daten dynamisch mit einem anderen Ajax-Aufruf genommen werden. Daher kann ich sie nicht in HTML-Hilfsklassen platzieren. Vielleicht gibt es eine bessere Lösung für diesen Fall, aber ich weiß nicht wie! Prost :) –

+0

In diesem Fall müssen Sie möglicherweise Ajax verwenden (aber ohne den Rest des Codes zu kennen, ist es schwierig, sicher zu sein, was der beste Ansatz ist) –

0

Sie verwenden falsches JSON-Format, richtiges Format wie folgt:

{"Title": "title", "Content": "content","Tag":[{ "tagName": "tname", "tagDescription": "tdesc"},{ "tagName": "tname1", "tagDescription": "tdesc1"}]} 

Um Ihr JSON-Zeichenfolge zu überprüfen, können Sie den folgenden Link verwenden https://jsonformatter.curiousconcept.com/