0

部分ビューを含むメインビューがあります。部分ビューのモデルには、他のプロパティとともに「HttpPostedFileBaseファイル」と呼ばれる1つのプロパティがあります

ただし、メインビューが投稿されると、そのモデルの他のすべてのプロパティは正しい値を取得しますが、「HttpPostedFileBaseファイル」はnullになります。の名前はすでにパラメータと同じに設定しています。また、Request.Filesでさえ0個のファイルを提供します。

私は何を間違えましたか?

PS私のメインビューには、実際には2つの部分ビューがあります。1つのPVはメインビューと同じモデルです。2つ目は私が上で述べたものです。モデルには、オブジェクトのリストとHttpPostedFileBaseファイルが含まれています。このようなコード:

public class MyPartialViewModel
{
    public List<MyObject> objInfos { get; set; }


    public ICollection<HttpPostedFileBase> file { get; set; }
}

そしてPVでは、@ Html.EditFor(model => model.objInfos [i])をループ的に使用してテンプレートにバインドします。

したがって、メインビューのpostメソッドでは、「objInfos」リストとすべてのオブジェクトの値を正しく取得できます。ただし、「ファイル」はNULLです。

4

2 に答える 2

1

ヘルパーののenctype = "multipart/form-data"1 つとして追加してみてください。htmlAttributes@Html.BeginForm()

編集:視覚的な完全なポストバックを作成しないようにするには:

iFrameを使用したMVC3でのAJAX FILEアップロード

この適切な瞬間に、私はこのアプローチを使用しており、実際にこれを実装して書いています。

于 2012-11-09T01:25:36.653 に答える
1

同じ問題に遭遇したばかりで、ActionResult に追加のパラメーターを配置してファイル アップロード パラメーターを取得することで回避しました。

    [Authorize]
    [HttpPost]
    public ActionResult MyActionResult(MyViewModel viewModel, HttpPostedFileBase myFileToUpload)
    {
        myViewModel.PartialViewModel.MyFileToUpload = myFileToUpload;
            //manually bind MyFileToUpload;
            //for some reason, because it's in the Partial View and it's of type HttpPostedFileBase, it won't post.

        return View(viewModel);
    }

文脈のために:

私の PartialViewModel にはコードが含まれています:

    public HttpPostedFileBase MyFileToUpload{ get; set; }

コードを PartialView します。

    <div class="editor-item">
        <div class="editor-label">
            @Html.LabelFor(model => model.MyFileToUpload)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MyFileToUpload)
        </div>
    </div>

最後に、EditorTemplate Views/Shared/EditorTemplates/HttpPostedFileBase.cshtml があります。

@model HttpPostedFileBase
<input type="file" name="@ViewData.ModelMetadata.PropertyName" />

これは解決策ではなく回避策ですが、PartialViewModel に HttpPostedFileBase を残したままファイルをアップロードできます。

于 2012-11-26T22:55:11.653 に答える