【问题标题】:How to upload file in ASP.NET razor如何在 ASP.NET razor 中上传文件
【发布时间】:2014-07-02 08:04:58
【问题描述】:

我想上传文件夹图片中的文件。
我将 ASP.NET 与 MVC4 和 razor 一起使用。

我的视图中有这个:

    <div class="editor-label">
         @Html.Label("Descriptif")
    </div>
    <div class="editor-field">
         <input type="file" name="fDescriptif" />
         @Html.ValidationMessageFor(model => model.fDescriptif)
    </div>
[...]
    <p>
        <input type="submit" value="Create" />
    </p>

在我的控制器中:

[HttpPost]
public ActionResult Create(formation formation)
{
    if (ModelState.IsValid)
    {
        db.formations.Add(formation);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(formation);
}

在我的模型中:

 public string fDescriptif { get; set; }

我不知道我必须做什么才能将我的文件上传到我的文件夹“image”中并将我的文件名保存在我的数据库中。当我验证我的表单时,保存的是我的完整路径。

【问题讨论】:

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

在您看来,请确保您已将 enctype = "multipart/form-data" 添加到您的 form 标记中,然后尝试这样:

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post, new { enctype = "multipart/form-data", id = "frmID" }))

您可以在 Controller Action AS 中获取您的文件:

[HttpPost]
 public ActionResult Create(formation formation,HttpPostedFileBase file)
 {
   if (ModelState.IsValid)
   {
     // Get your File from file
   }

   return View(formation);
 }

【讨论】:

    【解决方案2】:

    你可以找到很多这样的问题,即使这个话题已经给出了这么多的答案。

    这里有 2 个链接。你应该在这个链接中找到你的答案。 SO上有更多其他答案。谷歌一下,你会找到的。

    https://stackoverflow.com/a/5193851/1629650

    https://stackoverflow.com/a/15680783/1629650

    【讨论】:

      【解决方案3】:

      除了文件之外,您的表单不包含任何输入标记,因此在您的控制器操作中,除了上传的文件(这就是发送到服务器的所有内容)之外,您不能期望得到任何其他内容。实现此目的的一种方法是包含一个包含模型 id 的隐藏标签,这将允许您从要发布到的控制器操作内的数据存储中检索它(如果用户不应该修改模型但使用此只需附加一个文件):

      @using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { enctype = "multipart/form-data" }))
      
       @Html.TextBoxFor(m => m.File, new { @type = "file" })
      

      CONTROLLER

      [HttpPost]
          public ActionResult ACTION(ViewModels.Model taskModel)
          {
            string path = @"D:\Projects\TestApps\uploadedDocs\";
               if (taskModel.File != null) {
                      taskModel.File.SaveAs(path +taskModel.TaskTitle 
                                  + taskModel.File.FileName);
                       newUserProject.DocumentTitle = taskModel.TaskTitle 
                                  + taskModel.File.FileName;
                        newUserProject.DocumentPath = path + taskModel.File.FileName;
                          }
      }
      

      【讨论】:

        【解决方案4】:
        <form action="" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label>
          <input type="file" name="file" id="file" />
          <input type="submit" />
        </form>
        

        你的控制器应该如下

            [HttpPost]
            public ActionResult Index(HttpPostedFileBase file)
            {
        
                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");
            }
        

        【讨论】:

        • 这可能没有回答这个问题,但它帮助了我。谢谢。
        猜你喜欢
        • 2018-01-21
        • 2012-12-22
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        • 2012-03-13
        • 2020-07-19
        • 2013-07-28
        相关资源
        最近更新 更多