2017-08-13 31 views
1

私はこの例を、RazorとC#を使用したFile UploadsのMS Webサイトで公開しています。ASP.NET Razor File Upload

複数のファイルアップロードボタンがある場合、C#コードはアップロードされたファイルの元のボタンをどのように認識しますか?ファイルがアップロードされたボタンに基づいて、特定のフォルダにファイルを保存します。

https://docs.microsoft.com/en-us/aspnet/web-pages/overview/data/working-with-files

@using Microsoft.Web.Helpers; 
    @{ 
     var fileName = ""; 
     if (IsPost) { 
      var fileSavePath = ""; 
      var uploadedFile = Request.Files[0]; 
      fileName = Path.GetFileName(uploadedFile.FileName); 
      fileSavePath = Server.MapPath("~/App_Data/UploadedFiles/" + 
       fileName); 
      uploadedFile.SaveAs(fileSavePath); 
     } 
    } 
    <!DOCTYPE html> 
    <html> 
     <head> 
     <title>FileUpload - Single-File Example</title> 
     </head> 
     <body> 
     <h1>FileUpload - Single-File Example</h1> 
     @FileUpload.GetHtml(
      initialNumberOfFiles:1, 
      allowMoreFilesToBeAdded:false, 
      includeFormTag:true, 
      uploadText:"Upload") 
     @if (IsPost) { 
      <span>File uploaded!</span><br/> 
     } 
     </body> 
    </html> 

答えて

3

これを行う方法は、ボタンに名前を付ける同じですが、それらに異なる値を与えることです。 case文を実行し、その値に基づいてロジックを指示することができます。レイザー

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 

    <input type="file" name="FirstUpload" /> 
    <input type="submit" name="submitID" id="submitID" value="Upload1" /> 

    <input type="file" name="SecondUpload" /> 
    <input type="submit" name="submitID" id="submitID" value="Upload2" /> 

} 

コントローラ

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

     [HttpPost] 
     public ActionResult Index(FormCollection collection) 
     { 
      string btn = Request.Params["submitID"]; 

      switch (btn) 
      { 
       case "Upload1": 

        for (int i = 0; i < Request.Files.Count; i++) 
        { 
         var file = Request.Files[i]; 
        }      
        break; 

       case "Upload2": 

        for (int i = 0; i < Request.Files.Count; i++) 
        { 
         var file = Request.Files[i]; 
        } 
        break; 
      } 

      return View(); 
     } 
0

は、私は同様の問題を抱えていたし、次のコードになってしまった:
レイザー

//BeginForm and other staff 
@foreach (var d in Model.Types) 
{ 
    <input type="file" name="doc:@d.Id:upload" />//@d.Id is the key point 
    <button formenctype="multipart/form-data" 
     type="submit" formaction="/MyController/uploaddoc" 
     name="typeid" formmethod="post" value="@d.Id">//this way I send Id to controller 
     Upload 
    </button> 
} 

MYCオンリフト

[HttpPost] 
[ValidateAntiForgeryToken] 
[Route("mycontroller/uploaddoc")]//same as formaction 
public async Task<ActionResult> UploadDoc(FormCollection data, int typeid) 
{ 
    //restore inpput name 
    var fl = Request.Files["doc:" + typeid.ToString() + ":upload"]; 
    if (fl != null && fl.ContentLength > 0) 
    { 
     var path = Server.MapPath("~/app_data/docs"); 
     var fn = Guid.NewGuid().ToString();//random name 
     using (FileStream fs = System.IO.File.Create(Path.Combine(path, fn))) 
     { 
      await fl.InputStream.CopyToAsync(fs); 
     } 
    } 

}