2016-08-31 2 views
0

Sehr straight forward $ .post (url, Daten).NET MVC-Controller-Bindung an nicht-Typ

Daten ist dieses Objekt

    var model = { 
        applNo: pdAppNo, 
        amount: 999, 
        schldDate: new Date(), 
        userId: "corey", 
        tdcId: "234234234" 
       }; 

Aufruf einer MVC-Controller-Objekt, das Setup wie

ist
[HttpPost] 
    public JsonResult PostScheduleMakeUpPayment(object model) 
    { 
     //return _updateTdc.ProcessMakeUpPayment(applNo, amount, schldDate, userId, tdcId); 
     return Json("Success:True"); 
    } 

im Innern des ‚Modell‘ des Controllers sein nicht die jSON-Daten zeigen, nur '{Objekt}

So MVC wird nicht Erlaube ich Json auf Objekttyp zu posten?

+3

Erstellen Sie eine neue benannte Klasse für Ihr 'Objekt'. Die automatische Bindung benötigt Eigenschaftsnamen. – Jasen

Antwort

1

Sie benötigen die create benannte Klasse.

public class TestModel 
{ 
public string applNo {get;set;} 
public int amount{get;set;} 
public DateTime schldDate{get;set;} 
public string userId{get;set;} 
public string tdcId{get;set;} 
} 

    [HttpPost] 
    public JsonResult PostScheduleMakeUpPayment(TestModel model) 
    { 
     //return _updateTdc.ProcessMakeUpPayment(model.applNo, model.amount, model.schldDate, model.userId, model.tdcId); 
     return Json("Success:True"); 
    } 
+0

Richtig verstehe ich das. Ich denke, meine Frage ist, wie erlaube ich Objekttypen als meine Controller-Parameter? Ich denke, ich könnte einfach den String-Typ erstellen und den JSON untersuchen, um zu sehen, ob er in verschiedene Typen deserialisiert wird. Ich möchte, dass eine Methode, die die Buchung geplanter Zahlungen in ihren Typen steuert, nicht immer die gleiche ist. – chdev77

+0

Wenn du etwas anderes fragen willst, kannst du so fragen. Wenn Sie ein Objekt als Json zurückgeben wollen, können Sie so schreiben. return new Json ({Erfolg: true, Nachricht: "No Error"}); Sie können die Antwort von der Client-Seite behandeln. –

+0

Ich spreche nicht über Rückgabetyp. Der Parametertyp nur ... die Anfrage. Kann ich einen benutzerdefinierten Modellbinder erstellen? Ich habe keine Beispiele dafür gefunden, auf die ich mein Problem beziehen kann. – chdev77

1

Eine JSON-Zeichenfolge ist eine Sammlung von Schlüsselpaarwerten. Sie können Ihr Objekt als JSON-String posten und eine Funktion verwenden, um die Werte eines Dictionary hinzuzufügen und sie dann in der Controller-Funktion zu verwenden. Zum Beispiel:

public static Dictionary<string,object> BinderModel(string model) 
{ 
    Dictionary<string,JToken> result = new Dictionary<string,object>(); 
    JObject jObject = JObject.Parse(model); 
    foreach (JProperty x in (JToken)jObject) 
    { 
     result.Add(x.Name,x.Value); 
    } 
    return result; 
} 

und dann Controller-Funktion wie diese

[HttpPost] 
public JsonResult PostScheduleMakeUpPayment(string model) 
{ 
    Dictionary<string,object> values = BinderModel(jsonString); 
    //return _updateTdc.ProcessMakeUpPayment(values["applNo"], values["amount"], values["schldDate"], values["userId"], values["tdcId); 
    return Json("Success:True"); 
} 

Die Art des Modellwertes hängt von der Art des ProcessMakeUpPayment Eingabeparameters. Sie müssen möglicherweise eine Umwandlung vor dem Anruf oder in ihm

+0

Ich dachte auch daran, aber Ihr js-Modell muss abgeflacht werden. – chdev77

+0

Ich werde diese Antwort akzeptieren. – chdev77

0

Ich denke, Objekttyp Parameter auf MVC-Controller werden nicht unterstützt/schlechtes Design. Zusammen mit MVC nicht unterstützen generische Typen auf seiner Ansicht/Razor-Syntax.

Verwandte Themen