2016-05-31 9 views
0

Ich bin wirklich noob bei diesem. Ich verwende Knockout, um Daten vom Frontend zum Backend zu speichern. Was ich tun möchte, ist ein Knockout-Array zu einem IEnumerable-Objekt in C# speichernC# - Post-Knockout-Array zu einem IEnumerable-Objekt

public class VDenuncia 
{ 
    public int IdDenuncia { get; set; } 
    public string Name{ get; set; } 
    public string LastName { get; set; } 
    public string FirstName { get; set; } 
    public IEnumerable<VFiles> Files { get; set; } 
} 

Wie Sie sehen können darunter mein Modell ist

public class VFiles 
{ 
    public int IdFile { get; set; } 
    public byte[] File { get; set; } 
    public string Extension { get; set; } 

} 

Und das ist das Modell für Dateien.

Zuerst speichere ich die Dateien in einem DB und die ID des Einsatzes, ich möchte diese ID in VDenuncia mit Knockout speichern, aber nicht wissen, wie man es entwickelt.

Ich bin mit Ajax zu C# zu JS gehen, aber wenn zu IEnumerable Umwandlung observableArray bekommt kein Objekt in C#

$.ajax({ 
      type: 'POST', 
      url: 'Home/Save', 
      data: { denuncia: data }, 
      async: true, 
      success: function (data) { 

speichern Aktion von Homecontroller

[HttpPost] 
    public async Task<JsonResult> Save(VDenuncia denuncia) 
    { 
     var manager = new DenunciaManager(); 
     var result = await manager.SaveDenuncia(denuncia); 

     return new JsonResult 
     { 
      Data = result.Folio, 
      MaxJsonLength = int.MaxValue, 
      JsonRequestBehavior = JsonRequestBehavior.AllowGet 
     }; 
    } 

Dies ist der Wert von Dateien.

var data = { 
    Name: self.Name(), 
    LastName: self.LastName(), 
    FirstName: self.FirstName(), 
    Files: ({ 
     IdFile: self.IdFile(), 
     File: self.File(), 
     Extension: self.Extension(), 
    }) 
}; 

LÖSUNG:

Die Lösung, die Arbeiten gegeben, aber ich erkannte, dass ich mit Arrays arbeitete und ich nur auf Daten ändern, was als nächstes ist:

Files: [{ 
    IdFile: self.IdFile(), 
    File: self.File(), 
    Extension: self.Extension(), 
}] 
+0

Können Sie Ihre Aktion "Speichern" vom HomeController teilen? –

+0

Sicher, ich bearbeite bereits meine Frage –

+0

Postleitzahl, keine Bilder davon. Und was ist der Wert von 'Daten'? Wenn es im richtigen Format ist, wird es gut binden (aber wahrscheinlich müssen Sie die Daten string und verwenden 'contentType: 'json'') –

Antwort

0

sollten Sie Entpacke die Observablen in deinem Objekt und fasse dann dein JavaScript-Objekt an JSON an.

Verwendung ko.mapping Modul Ihr Javascript-Objekt leicht wie folgt auspacken:

var payload = ko.mapping.toJS(data); //unwrap your observables 

und dann die Art, wie json in Ihrem Ajax-Request und konvertieren payload zu JSON mit JSON.stringify(payload) wie in dem folgenden:

var ajaxOptions = { 
       url: 'Home/Save', 
       data: JSON.stringify(payload), 
       type: "POST", 
       dataType: "json", 
      }; 
+0

Dies funktioniert nicht, das Problem ist in Ajax, wenn gesendet Daten, die ich in mvc eingehüllt bekomme, aber in Objektdateien heißt es "null" –

+0

@JonathanAxel ändere den byte [] Typ der Eigenschaft 'File' in 'HttpPostedFileBase' (google das) und lese dann den Stream in diesem Objekt in Bytes. Wenn Sie jedoch Dateien über Ajax hochladen möchten, sollten Sie sich das jquery-blueimp-Plugin ansehen, um mehrere Browser-Unterstützung zu erhalten. –

Verwandte Themen