我会尽力解释一下:
我有一个实体 - 图像 - 看起来像这样:
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'类型的参数转换失败,因为没有类型转换器可以在这些类型之间进行转换。
任何想法?
答案 0 :(得分:8)
模型绑定器尝试将名为<input type="file"
的{{1}}元素绑定到image
类的Image
属性。
只需提供操作的第二个参数,Restaurant
元素的名称不是<input type="file
。