如何在ASP.NET razor中上传文件

时间:2014-07-02 08:04:59

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

我想在文件夹图片中上传文件 我将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; }

我不知道在我的文件夹中上传我的文件必须做些什么&#34; image&#34;并在我的数据库中保存我的文件的名称。当我验证我的表格时,它是我保存的完整路径。

4 个答案:

答案 0 :(得分: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);
 }

答案 1 :(得分:0)

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

以下是2个链接。你应该在这个链接中找到你的答案。还有更多的其他答案在SO上。只是google它,你会发现它们。

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

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

答案 2 :(得分:0)

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

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

 @Html.TextBoxFor(m => m.File, new { @type = "file" })

AND IN 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;
                    }
}

答案 3 :(得分:-2)

<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");
    }