嗨我发布图片时似乎遇到了问题。我已经在stackoverflow和其他论坛上查了很多关于这个主题的问题,但似乎没有提供我需要的答案。这是我的代码:
@using( Html.BeginForm("Create", "ProductManager", FormMethod.Post, new{enctype = "multipart/form-data"})){
<ul>
....
<li>
@Html.LabelFor(model => model.ProductImagePath , "Avatar")
<input type="file" id="ProductAvatar" name="ProductAvatar" />
@Html.HiddenFor(model => model.ProductImagePath , new { id = "AvatarHiddenField"})
</li>
<li>
@Html.LabelFor(model => model.ProductName , "Product Name")
@Html.EditorFor(model => model.ProductName)
</li>
.....
</ul>
}
[HttpPost]
public ActionResult Create( FormCollection collection , HttpPostedFileBase avatar)
{
string file = collection["ProductAvatar"];
var avatars = avatar;
}
从调试中我发现HttpPostedFileBase返回null。集合中的其他表单数据成功发布。只有图像没有被发布。我似乎无法从FormCollection或HttpPostedFileBase访问ProductAvatar,它似乎是甚至没有发布
我如何解决这个问题?
答案 0 :(得分:6)
您必须使用将HttpPostedFile
参数的名称更改为表单上输入文件的相同名称,或者您也可以使用Request.Files
并通过{{1}获取输入文件的属性,尝试这样的事情:
name
[HttpPost]
public ActionResult Create(FormCollection collection)
{
HttpPostedFileBase file = Request.Files["ProductAvatar"];
if (file.ContentLength > 0)
{
file.SaveAs(/* path */);
}
// othyer tasks
return RedirectToAction("Index");
}
属性是浏览器在提交时在发布/获取表单上发送的内容。
答案 1 :(得分:6)
您的操作方法参数名称需要与文件输入名称匹配。
所以这个:
<input type="file" id="ProductAvatar" name="ProductAvatar" />
您需要一个方法签名,如:
public ActionResult Create(FormCollection collection, HttpPostedFileBase productAvatar)