.NET MVC3图像上传相关错误:从类型'System.Web.HttpPostedFileWrapper'转换为'Project.Domain.Entities.Image'类型

时间:2012-11-08 10:47:39

标签: c# .net image upload type-conversion

我会尽力解释一下:

我有一个实体 - 图像 - 看起来像这样:

public class Image : IEntity
    {
        public int ID
        {
            get;
            set;
        }
        public string name
        {
            get;
            set;
        }
        public virtual ICollection<Restaurant> Restaurant
        {
            get;
            set;
        }
    }
}

以下是Restaurant实体类中的相关属性:

[HiddenInput(DisplayValue = false)]
public Guid ImageID { get; set; }
public string ImageName { get; set; }
public virtual Image Image
        {
            get;
            set;
        }

        public byte[] ImageData 
        { 
            get; set; 
        }
        [HiddenInput(DisplayValue = false)]
        public string ImageMimeType 
        { 
            get; set; 
        }

在我的视图中,用户拍摄图像并将其上传以便为用户保存,我有一个简单的,带有enctype =“multipart / form-data”。在这种情况下,用户是一个实体 - 餐厅。

@using (Html.BeginForm("Edit", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))

[...]

<input type="file" name="image" />

[...]

这是AdminController中的ActionResult,它应该处理已发布的图像(以及来自html的其他数据)。

[HttpPost]
        public ActionResult Edit(Restaurant rest, Address address, HttpPostedFileWrapper image)
        {
            if (ModelState.IsValid)
            {
                if (image != null && image.ContentLength > 0)
                {
                    var filename = Path.GetFileName(image.FileName);
                    Guid imageID = Guid.NewGuid();
                    var relativePath = @"~/Content/Images/Logotypes/" + imageID.ToString();
                    image.SaveAs(Server.MapPath(relativePath));

                    rest.ImageMimeType = image.ContentType;
                    rest.ImageName = filename;
                    rest.ImageID = imageID;

                    repo.Save(rest);
                }
                return View(rest);
            }
            else
            {
                var errors = ModelState
                .Where(x => x.Value.Errors.Count > 0)
                .Select(x => new { x.Key, x.Value.Errors })
                .ToArray();

                return View(rest);
            }
        }

当它运行代码时,ModelState.IsValid()返回false,ModelState-error如下:

{System.InvalidOperationException:从类型'System.Web.HttpPostedFileWrapper'到'Projct.Domain.Entities.Image'类型的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。

任何想法?

1 个答案:

答案 0 :(得分:8)

模型绑定器尝试将名为<input type="file"的{​​{1}}元素绑定到image类的Image属性。

只需提供操作的第二个参数,Restaurant元素的名称不是<input type="file