我正在尝试在我的应用程序中上传文件。我在我的模型和HttpPostedFileBase
数组中使用了byte[]
,但在运行我的应用程序时不知道为什么会出现此错误。下面我还上传了运行应用时显示的错误的image
。
显示的错误是:
在模型生成期间检测到一个或多个验证错误:
AdSite.Models.HttpPostedFileBase ::
EntityType 'HttpPostedFileBase' has no key defined. Define the key for this EntityType.
HttpPostedFileBases:EntityType:EntitySet'HttpPostedFileBases'基于类型'HttpPostedFileBase',没有定义键。
我的模特:
public class Album
{
[Key]
public int Id { get; set; }
public string ProductTitle { get; set; }
public string Description { get; set; }
public string ImageFileName { get; set; }
public int ImageSize { get; set; }
public byte[] ImageData { get; set; }
[Required(ErrorMessage="Please select image file.")]
public HttpPostedFileBase File { get; set; }
}
我的控制器代码:
public ActionResult Upload([Bind(Include = "Id,ProductTitle,Description,ImageFileName,ImageData,File,ImageSize")]Album album)
{
if (ModelState.IsValid)
{
// album.ImageFileName = album.File.FileName;
// album.ImageSize = album.File.ContentLength;
byte[] data = new byte[album.File.InputStream.Length];
album.File.InputStream.Read(data, 0, data.Length);
album.ImageData = data;
var db = new AlbumContext();
db.Albums.Add(album);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(album);
}
我的观看代码:
<div class="form-group">
<label class="control-label col-md-2">Select Image:</label>
<div class="col-md-10">
@Html.TextBoxFor(model=>model.File, new { type="file"})
@Html.ValidationMessage("CustomError")
</div>
</div>
答案 0 :(得分:0)
这就是您希望使用模型检索数据然后将其转换为DTO对象的原因。
错误是因为您尝试将System.Web.HttpPostedFileBase
类存储到数据库中。这不是你要控制的类,它不是为了直接存储在数据库中而创建的。在这种情况下,HttpPostedFileBase
是您的“模特”。
创建另一个对象并将其绑定到DbContext
以存储数据库中文件所需的内容。不要只是把物体扔在那里。