Nis*_*dru 3 c# asp.net asp.net-mvc asp.net-mvc-3
嗨我发布图片时似乎遇到了问题.我已经在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;
}
Run Code Online (Sandbox Code Playgroud)
从调试我发现HttpPostedFileBase返回null.集合中的其他表单数据成功发布.只有图像没有发布.我似乎无法从FormCollection或HttpPostedFileBase访问ProductAvatar,似乎它甚至没有发布
我怎样才能解决这个问题呢?
您必须使用将HttpPostedFile参数的名称更改为表单上输入文件的相同名称,或者您也可以使用输入文件Request.Files的name属性来获取,尝试这样的事情:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
HttpPostedFileBase file = Request.Files["ProductAvatar"];
if (file.ContentLength > 0)
{
file.SaveAs(/* path */);
}
// othyer tasks
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
该name属性是浏览器在提交时将在发布/获取表单上发送的内容.
您的操作方法参数名称需要与文件输入名称匹配.
所以这个:
<input type="file" id="ProductAvatar" name="ProductAvatar" />
Run Code Online (Sandbox Code Playgroud)
你需要一个方法签名,如:
public ActionResult Create(FormCollection collection, HttpPostedFileBase productAvatar)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3721 次 |
| 最近记录: |