3

まず、私の状況をできるだけ簡単に説明してみましょう。

複数の [input type='File'] を含むページがあるとします。ファイルを選択できるものもあれば、選択できないものもあります。

私の httppost メソッドでは、「IEnumerable files」のようなパラメーターを使用してファイル名を取得する必要があることを知っています。また、各 [input] 名も = 'files' または 'files[0]','files[1]' のいずれかを定義する必要があります。など.....

私の質問は: HttpPostedFileBase のリストを取得するとき、どのファイルがどの入力コントロールに属しているかをどのように判断できますか? 一部の入力が空白のままになる可能性があるためです。

また、これらの [input] は動的に作成され、固定数がないため、それぞれの httppost メソッドでパラメーターをハードコードすることはできませんでした。

4

3 に答える 3

2

この解決策を試してください:

意見:

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file1" />
    <input type="file" name="file2"/>
    <input type="file" name="file3"/>
    <input type="file" name="file4"/>
    <input type="file" name="file5"/>

    <input type="submit" value="go" />
}

コントローラ:

  var uploaded = Request.Files.AllKeys
      .Select(x => new {file = Request.Files[x], name = x})
            .Where(x => x.file.ContentLength > 0).ToList();

「アップロードされた」匿名タイプには、入力コントロール名に属するファイルが含まれ、選択された入力名のみが含まれます

于 2012-10-31T12:18:17.760 に答える
0

ファイルアップロードコントロールの数を固定している場合は、次のようにモデルを定義できます。

    public class FileUpload
        {
            public HttpPostedFileBase FileUpload1 { get; set; }
            public HttpPostedFileBase FileUpload2 { get; set; }
            public HttpPostedFileBase FileUpload3 { get; set; }
        }

そして、アクションから、以下のようにそれらにアクセスできます

     public ActionResult Index(Mvc4Application.Models.FileUpload objFileUpload)
    {
          // Do some code like here you can check for each 3 files like
          if(objFileUpload.FileUpload1 != null)
          {
             // Some code
          }
        return View();
    }

詳細については、ここをクリックしてください

于 2012-11-02T05:11:47.653 に答える
0

このコードを使用できます

    [HttpPost]
    public ActionResult Index(IEnumerable<HttpPostedFileBase> files) {
    foreach (var file in files) {
             if (file.ContentLength > 0) {
               var fileName = Path.GetFileName(file.FileName);
               var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
               file.SaveAs(path);
             }
    }
    return RedirectToAction("Index");
    }

ここでは、すべてのファイルについて、ファイルが存在するかどうかを確認できます。

于 2012-10-31T05:58:14.840 に答える