我正在使用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
的值不会改变。
答案 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对象中的上传文件。