更好的解决方案,不排除Binding中的字段

时间:2013-12-31 23:27:19

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-2

我有一个实体电影,在数据库中有两个varbinary(海报和预告片)字段。当我想在控制器上创建实例时,我试图从View中获取这些字段时遇到了很多问题,最后,我得到了这个解决方案:

[HttpPost]
public ActionResult Create([Bind(Exclude = "poster, trailer")]Movie movie, HttpPostedFileBase poster, HttpPostedFileBase trailer)

对于这种绑定,任何人都有更好的解决方案,只是为了得到这样的东西?:

public ActionResult Create(Movie movie)

我需要“海报”和“预告片”字段,这些字段也是后期行动所带来的

2 个答案:

答案 0 :(得分:1)

您不应在观看中使用domain modelsViewModels是正确的方法。

您需要将域模型的必要字段映射到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");
}