2012-05-25 12 views
6

私は複数のファイルをアップロードしているフォームを持っており、アップロードされる各ファイルに関連したテキストボックスといくつかのチェックボックスがあります。 私はのActionResultの署名は、このようなもので、複数のファイルのアップロードのための例を見てきました。しかし、私は私のActionResultの署名は、このようなものであるところ、アップロード、複数のファイルを持つことができます任意の例を見つけるカントViewmodelにバインドされたファイルアップロード

[HttpPost] 
public ActionResult Upload(IEnumerable<HttpPostedFileBase> fileUpload) 

を:

[HttpPost] 
public ActionResult Upload(MyViewModel vm) 

FormCollection変数を使用するよりもはるかにクリーンだと思っています。アップロードされる各ファイルと関連するテキストボックスと共に追加されたデータが、 List<FileUploadPacket>これはp

public class EmployeeVM 
{ 

    public int EmployeeID {get ;set;} 
    public string EmpName {get ;set;} 
    //Other properties 

    public List<FileUploadPacket> FileUploadPackets { get; set; } 
} 

型のプロパティを持つFileUploadPacketクラスHttpPostedFileBase

public class FileUploadPacket 
{ 

    public int FileID {get ;set;} 
    public string UserEnteredDesc {get ;set;} 
    //some more other properties 

    public HttpPostedFileBase UpFile { get; set; } 
} 

私の見解のコードスニペット:ViewModelに

UPDATE

下のマイビューモデルの芸術。以下のaspx

<%: Html.TextBoxFor(model => model.EmpName, new { maxLength = 50 })%> 

Upload your files here: 
<input type="file" id="UpFile" name="UpFile" value="ActionHandlerForForm" /> 
<%: Html.TextBoxFor(model => model.FileUploadPackets[0].UserEnteredDesc)%> 

<input type="file" id="UpFile" name="UpFile" value="ActionHandlerForForm" /> 
<%: Html.TextBoxFor(model => model.FileUploadPackets[1].UserEnteredDesc)%> 

ご覧のとおり、この1つのファイルに固有のその他のプロパティはすべて、アップロードされて自分のクラスに保持されています。従業員は自分の名前を入力してファイルをアップロードし、各ファイルの説明やその他の詳細を入力することができます。パブリックHttpPostedFileBase UpFile { get; set; }プロパティをEmployeeVMクラスに移動すると、配列内のすべてのファイルを個別に収集し、ファイルをその説明に手動でマップする必要があります。 FileUploadPacketクラス自体のUpFileプロパティを保持する方法はありませんか?

私はaspxビューエンジンを使用しています。

助けてください。あなたのお時間をいただきありがとうございます...

答えて

2

アップロードコントロールの名前とIDの変更方法です。

<%: Html.TextBoxFor(model => model.EmpName, new { maxLength = 50 })%> 

Upload your files here: 
<input type="file" id="FileUploadPackets[0].UpFile" name="FileUploadPackets[0].UpFile" value="ActionHandlerForForm" /> 
<%: Html.TextBoxFor(model => model.FileUploadPackets[0].UserEnteredDesc)%> 

<input type="file" id="FileUploadPackets[1].UpFile" name="FileUploadPackets[1].UpFile" value="ActionHandlerForForm" /> 
<%: Html.TextBoxFor(model => model.FileUploadPackets[1].UserEnteredDesc)%> 

これは私のために働いた!!

4

GetHtmlヘルパーはmvcフレームワークの一部ではありませんので、あなたはそのヘルパーを含むサードパーティライブラリを検索する必要があります。

ViewModelの一部であるファイルをアップロードするのは簡単ですが、基本的には、MyViewModel.cshtml

<input type="file" id="MyFile" name="MyFile" /> 

とビューを作成するアクションに

@model MyViewModel 

@using(Html.BeginForm("Upload", "MyController", FormMethod.Post, new { enctype="multipart/form-data"}) 
{ 
    @Html.EditorForModel() 
    <input type="submit" value="Upload" /> 
} 

必要な属性をアップロードするには、対応する、この

定義ビューモデルViews/Shared/EditorTemplatesインサイド

public class MyViewModel 
{ 
    public HttpPostedFileBase MyFile { get; set; } 
} 

ように書きすることが重要ですファイルをアップロードする。

フォームが提出されると、[HttpPost]のアクションvm.MyFileにアップロードされたファイルが表示されます。

+1

'enctype =" multipart/form-data "の部分が私のためにそれを解決しました。 –

関連する問題