我有一个实体电影,在数据库中有两个varbinary(海报和预告片)字段。当我想在控制器上创建实例时,我试图从View中获取这些字段时遇到了很多问题,最后,我得到了这个解决方案:
[HttpPost]
public ActionResult Create([Bind(Exclude = "poster, trailer")]Movie movie, HttpPostedFileBase poster, HttpPostedFileBase trailer)
对于这种绑定,任何人都有更好的解决方案,只是为了得到这样的东西?:
public ActionResult Create(Movie movie)
我需要“海报”和“预告片”字段,这些字段也是后期行动所带来的
答案 0 :(得分:1)
您不应在观看中使用domain models
。 ViewModels
是正确的方法。
您需要将域模型的必要字段映射到viewmodel,然后在控制器中使用此viewmodel。这样您就可以在应用程序中使用necessery抽象。
如果您从未听说过视图模型,请查看this。
答案 1 :(得分:1)
使用视图模型
public class MovieModel
{
public HttpPostedFileBase Poster { get; set; }
public HttpPostedFileBase Trailer { get; set; }
}
你的控制器
[HttpGet]
public ActionResult Create()
{
return View(new MovieModel());
}
[HttpPost]
public ActionResult Create(MovieModel movie)
{
var entity = new Movie();
using (var memoryStream = new MemoryStream())
{
movie.Poster.InputStream.CopyTo(memoryStream);
entity.Poster = memoryStream.ToArray();
}
using (var memoryStream = new MemoryStream())
{
movie.Trailer.InputStream.CopyTo(memoryStream);
entity.Trailer = memoryStream.ToArray();
}
dbContext.Movies.AddObject(entity);
return View("index");
}