0

私は MVC アプリケーションを持っており、これが私がやろうとしていることです。サーバーにアップロードするファイルへのパスを格納するフィールドがあります。これはモデルです:

 int ID
 string Title
string Path

そして、ここに私のコントローラーがあります:

    public ActionResult Create(Book book)
        {
            if (ModelState.IsValid)
            {
               db.Books.Add(book);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

        ViewBag.CreatedBy = new SelectList(db.Users, "ID", "UserName", book.CreatedBy);
        return View(book);
    }

MVC 3 でファイルをアップロードするためのコントロールが見つかりません。利用可能なすべてのソリューションがファイルを個別のエンティティとして扱うため、回避策があるかどうかわかりません。

サンプルコードをいただければ幸いです。

4

1 に答える 1

2

アップロードされたファイルと他のフォーム変数の両方を POST することができます。まず、コントローラーを宣言します。

public ActionResult Create(Book book, HttpPostedFileBase file)
{
    if (ModelState.IsValid)
    {
        db.Books.Add(book);
        db.SaveChanges();
        return RedirectToAction("Index");  
    }

    ViewBag.CreatedBy = new SelectList(db.Users, "ID", "UserName", book.CreatedBy);
    return View(book);
}

そしてあなたのフォームで:

@using (Html.BeginForm("Create", "Book", FormMethod.Post, new {enctype = "multipart/form-data"}))
{
    @Html.TextBoxFor(m => m.Title)
    <input type="file" id="file" name="file" />
    <input type="submit" value="Upload" />
}

これにより、ファイルと「タイトル」の両方が POST されます。その後、file.FileName のファイル名にアクセスするか、どこかに保存して、ファイルで必要なことを行うことができます。重要なのは、フォーム enctype を「multipart/form-data」に設定することです。他の例については、このチュートリアルを参照してください

于 2013-01-06T17:02:20.573 に答える