ASP.NET MVC gab die Bindung des Dateimodells bekannt, wenn der Parameter Modell ist

Gibt es eine Möglichkeit, um hochgeladene Dateien (<input type="file" />) zur Teilnahme an Modell-Bindung in ASP.NET MVC ohne manuell zu suchen, auf Antrag Kontext, in ein benutzerdefiniertes Modell-binder, und ohne die Schaffung einer separaten action-Methode die dauert nur eine gebucht-Datei als Eingabe?

Hätte ich gedacht, dass das funktionieren würde:

class MyModel {
  public HttpPostedFileBase MyFile { get; set; }
  public int? OtherProperty { get; set; }
}

<form enctype="multipart/form-data">
  <input type="file" name="MyFile" />
  <input type="text" name="OtherProperty" />
</form>

public ActionResult Create(MyModel myModel) { ... } 

Aber angesichts der oben genannten Szenario, MyFile ist auch nicht Teil des value-Anbieter-Werte in den binding-Kontext. (OtherProperty ist, natürlich.) Aber es funktioniert, wenn ich dies tun:

public ActionResult Create(HttpPostedFileBase postedFile, ...) { ... } 

Also, warum kein verbindliches auftreten, wenn der parameter ein Modell, und wie kann ich machen, damit es funktioniert? Ich habe kein problem mit einem custom-model-binder, aber wie kann ich dies in ein benutzerdefiniertes Modell-binder ohne Blick auf Request.Files["MyFile"]?

Konsistenz, Verständlichkeit und Testbarkeit, ich möchte meinen code, um die automatische Bindung aller Eigenschaften, die auf einem Modell, einschließlich derjenigen, gebunden, hochgeladene Dateien ohne manuellen Abgleich der request-Kontext. Ich bin derzeit am testen von Modell-Bindung mit der Ansatz von Scott Hanselman schrieb über.

Oder werde ich über diese in die falsche Richtung? Wie würden Sie dies lösen? Oder ist dies nicht möglich, durch design durch die Geschichte der Trennung zwischen Anfrage.Form und Anforderung.Dateien?

InformationsquelleAutor der Frage bzlm | 2009-06-06

Schreibe einen Kommentar