9

複数のファイルをアップロードするフォームがあり、アップロードされる各ファイルに関連付けられたいくつかのテキストボックスといくつかのチェックボックスがあります。actionresult 署名が次のような複数のファイルをアップロードする例を見てきました。

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

ただし、アクション結果の署名が次のような複数のファイルをアップロードできる例は見つかりません。

[HttpPost]
public ActionResult Upload(MyViewModel vm)

このビューモデルを投稿したい理由は、 FormCollection 変数を使用するよりもきれいだと思うからです。また、アップロードされる各ファイルと、関連するテキストボックスとともに追加されたデータList<FileUploadPacket>を、ビューモデル

アップデート

以下の私のViewモデル:

public class EmployeeVM  
{

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

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

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

public class FileUploadPacket 
{

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

    public HttpPostedFileBase UpFile { get; set; }
}

以下のように私のview.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クラスに移動すると、すべてのファイルを配列に個別に収集し、ファイルをその説明に手動でマップする必要があります。UpFileプロパティをFileUploadPacketクラス自体に保持する方法はありませんか?

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

助けてください。御時間ありがとうございます...

4

2 に答える 2

12

GetHtmlヘルパーはMVCフレームワークの一部ではないため、そのヘルパーを含むサードパーティのライブラリを探す必要があります。

ただし、ViewModelの一部であるファイルのアップロードは簡単です。基本的にはこんな感じ

ビューモデルを定義する

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

内部Views/Shared/EditorTemplatesで、作成します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" />
}

必須属性はファイルをアップロードするために重要です。

[HttpPost]これで、フォームが送信されると、アクション内にアップロードされたファイルが表示されますvm.MyFile

于 2012-05-25T16:01:56.573 に答える
3

これに対する修正は、アップロードコントロールに名前を付けて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 )%>

これは私のために働いた!それが他の誰かに役立つことを願っています。

于 2012-05-31T12:58:12.877 に答える