HttpPostedFileBase始终返回null,并且不会发布图像

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,似乎它甚至没有发布

我怎样才能解决这个问题呢?

Fel*_*ani 6

您必须使用将HttpPostedFile参数的名称更改为表单上输入文件的相同名称,或者您也可以使用输入文件Request.Filesname属性来获取,尝试这样的事情:

[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属性是浏览器在提交时将在发布/获取表单上发送的内容.


Cha*_*ino 6

您的操作方法参数名称需要与文件输入名称匹配.

所以这个:

<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)

  • +1我强烈推荐这个.尽可能利用MVC.我尽量避免在浏览器中直接使用`Request`或`HttpContext`中的任何内容. (4认同)