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

我怎样才能纠正这个问题?

4

2 回答 2

6

您必须使用在表单上将参数名称更改为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");
}

name属性是浏览器在提交时将在 post/get 表单上发送的内容。

于 2013-01-09T00:36:47.973 回答
6

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

所以有了这个:

<input type="file" id="ProductAvatar" name="ProductAvatar" />

您需要一个方法签名,例如:

public ActionResult Create(FormCollection collection, HttpPostedFileBase productAvatar)
于 2013-01-09T01:02:05.177 回答