提交ASP.NET MVC表单后,文件路径为空

时间:2017-10-25 12:51:09

标签: html asp.net asp.net-mvc

我正在使用ASP.NET MVC,我有一个产品的编辑表单。产品的图像链接也应该是可编辑的。

在DB中我只存储图像URL,模型只包含此URL:

public class Product
{
    public int ProductId{ get; set; }
    public string ImgUrl{ get; set;}
}

表格:

@using (Html.BeginForm("EditProduct", "Products", FormMethod.Post))
{
    <img src="@Url.Content(Model.ImgUrl)" />
    @Html.TextBoxFor(m => m.ImgUrl, new { @type="file", @id="file-upload" })
    <input type="submit" class="btn btn-primary" />
}

此外,我还有一个空的动作方法:

    [HttpPost]
    public ActionResult EditProduct(Product product)
    {
        return View();
    }

有两个问题。

首先提交表单后product.ImgUrl为空。

第二个是选择文件后#file-upload的值不会改变。

1 个答案:

答案 0 :(得分:5)

尝试使用此解决方案

<强>模型

public class Product
{
    public int ProductId { get; set; }
    public HttpPostedFileBase Img { get; set; } //Added new property for mvc file http support
    public string ImgUrl { get; set; }
}

查看

@using (Html.BeginForm("EditProduct", "Products", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <img src="@Url.Content(Model.ImgUrl)" />
    @Html.TextBoxFor(m => m.Img, new { @type = "file", @id = "file-upload" })
    <input type="submit" class="btn btn-primary" />
}

<强>控制器

[HttpPost]
public ActionResult EditProduct(Product product)
{
    if (product.Img != null)
    {
        product.ImgUrl = product.Img.FileName; //or you can save anywhere and merge file name with path
    }
    return View();
}
  

<强>说明

     
      
  • 表单方法是POST,表单编码类型是multipart / form-data。上传需要这些参数   二进制数据到服务器。

  •   
  • type =“file”的输入元素显示“选择文件”按钮和包含所选文件名的字段。

  •   
  • input元素的名称标识HttpPostedFilesBase对象中的上传文件。

  •   

Here is nice blog explained for file upload in MVC