0

アップロードされたファイル(HTTPPostedFile)とアクションに投稿されたオブジェクトの取得に問題があります。私はwidgetというクラスを持っています:

public class Widget
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FilePath { get; set; }
}

ウィジェットコントローラーには「追加」メソッドがあります

public ActionResult Add()
{
    return View();
}

そして、ユーザーが投稿したものを受け入れるためのオーバーロードされたメソッド

[HttpPost]
public ActionResult Add(Widget widget, HttpPostedFile file)
{
    // Save posted file using a unique
    // Store the path/unique name in Widget.FilePath
    // Save new Widget object
    return View();
}

ビューには次のものがあります。

@model Project.Models.Widget
@{
    using(Html.BeginForm())
    {
        Html.LabelFor(model => model.FirstName)<br />
        Html.TextBoxFor(model => model.FirstName)<br />
        Html.LabelFor(model => model.LastName)<br />
        Html.TextBoxFor(model => model.LastName)<br />
        <input type="file" id="file" /><br />
        <input type="submit" value="Save" />
    }
}

私がやりたいのは、ユーザーにフォームに記入して、アップロードするファイルを選択してもらうことです。ファイルがアップロードされたら、一意の名前を使用してファイルを保存し、ファイルのパスをwidget.FilePathとして保存します。

試行するたびに、ウィジェットオブジェクトにデータが入力されますが、uploadedFileはnullです。

どんな助けでも大歓迎です。

4

1 に答える 1

6

コードにはいくつかの問題があります。

  • フォームに適切enctype="multipart/form-data"に設定されていることを確認してください。設定されていない場合、ファイルをアップロードできません。
  • ファイル入力にname属性があり、この属性の値がアクション引数の名前と一致していることを確認してください。を割り当てidても、サーバー側のバインディングには影響しません。

例えば:

@model Project.Models.Widget
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.LabelFor(model => model.FirstName)<br />
    @Html.TextBoxFor(model => model.FirstName)<br />
    @Html.LabelFor(model => model.LastName)<br />
    @Html.TextBoxFor(model => model.LastName)<br />
    <input type="file" id="file" name="file" /><br />
    <input type="submit" value="Save" />
}

また、コントローラーアクションが次のHttpPostedFileBase代わりに機能することを確認してくださいHttpPostedFile

[HttpPost]
public ActionResult Add(Widget widget, HttpPostedFileBase file)
{
    // Save posted file using a unique
    // Store the path/unique name in Widget.FilePath
    // Save new Widget object
    return View();
}

また、2つのパラメーターを単一のビューモデルにマージすることもできます。

public class Widget
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FilePath { get; set; }
    public HttpPostedFileBase File { get; set; }
}

その後:

[HttpPost]
public ActionResult Add(Widget widget)
{
    // Save posted file using a unique
    // Store the path/unique name in Widget.FilePath
    // Save new Widget object
    return View();
}

最後に、次のブログ投稿を読んでください:http: //haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

于 2012-05-24T15:34:24.893 に答える