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

时间:2013-01-09 00:23:02

标签: 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;
        }

从调试中我发现HttpPostedFileBase返回null。集合中的其他表单数据成功发布。只有图像没有被发布。我似乎无法从FormCollection或HttpPostedFileBase访问ProductAvatar,它似乎是甚至没有发布

我如何解决这个问题?

2 个答案:

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