2017-02-28 5 views
0

Ich habe zwei Ansicht Modelle wieDatei-Upload durch Modellansicht kommen als null

unter
public class hdr_doc_upload 
{ 
    public string document_name { get; set; } 
    public HttpPostedFileBase UpFile { get; set; } 
} 

public class list_doc 
{ 
    public List<hdr_doc_upload> hdr_doc_upload { get; set; } 
} 

-Controller

public ActionResult Create_Group() 
{ 
    list_doc list = new list_doc(); 
    return View(list); 
} 

Ansicht

@Html.TextBoxFor(model => model.hdr_doc_upload[0].document_name) 
<input type="file" id="hdr_doc_upload[0].UpFile" name="hdr_doc_viewmodel[0].UpFile" /> 
@Html.TextBoxFor(model => model.hdr_doc_upload[1].document_name) 
<input type="file" id="hdr_doc_upload[1].UpFile" name="hdr_doc_viewmodel[1].UpFile" /> 

Gib mir unter Bildschirm

enter image description here

aber wenn ich die Seite einreiche, bekommen wir nur die Textbox-Werte, die die Datei als null erhält. enter image description here

+0

'name =" hdr_doc_viewmodel Ansicht passing [0] .UpFile' hat keine Beziehung zu Ihrem Modell (sein 'hdr_doc_upload', nicht' hdr_doc_viewmodel') –

+1

Und generieren Sie es korrekt mit '@ Html.TextBoxFor (m => m.hdr_doc_upload [i] .UpFile, neue {type =" Datei "})' innerhalb einer 'for'-Schleife und fügen Sie 2 Elemente zu Ihrer Sammlung in der GET-Methode hinzu –

+0

@StephenMuecke tatsächlich Anzahl der Dateien wird dynamisch .. ist es möglich, eine Schaltfläche zu erstellen und das gleiche dynamisch generieren? – Sachu

Antwort

1

Ihr erstellendes Handbuch <input> Elemente, die name Attribute haben, die nicht zu Ihrem Modell gehören. Die Attribute braucht

jedoch sein, sollten Sie Sie steuern, für die Dateieingabe richtig stark typisierte TextBoxFor() Methode verwendet werden, zu erzeugen, in einer for Schleife.

In Ihrem Controller, füllen Sie Ihr Modell mit zwei neuen Instanzen von hdr_doc_upload bevor das Modell auf dem

list_doc list = new list_doc() 
{ 
    new list_doc(), 
    new list_doc() 
}; 
return View(list); 

und dann in der Ansicht

for(int i = 0; i < Model.Count; i++) 
{ 
    @Html.TextBoxFor(model => model.hdr_doc_upload[i].document_name) 
    @Html.TextBoxFor(model => model.hdr_doc_upload[i].UpFile, new { type = "file" }) 
}