我一直在阅读Professional ASP.NET MVC 1.0书籍以及阅读其他来源,谈论从控制器中使用ViewModel而不是ViewData到Views。但后来我看到很多ViewData的例子在艰难的场景中使用,除了从ViewData获取内容之外别无他法。但后来我读了一本像Pro ASP.NET MVC Framework的书,所有他谈到的只是ViewData,没有关于ViewModel的内容。那么ViewModel是一个非常新的概念还是什么?
我看到ViewModel是一个更好的方法,但它是一个可靠的替代方案吗?我的意思是ViewData很容易在其他的东西中使用,例如HtmlHelper对象,而ViewModel则不然。或者例如在自定义控件(http://www.codeproject.com/KB/custom-controls/MVCCustomControls.aspx)中使用它。那么我是否根据不同的目标使用两者的组合或什么?如果我想在我的Extension方法中出于任何原因访问ViewModel怎么办?我迷失在这条路上。我知道ViewData不是强类型的,但您可以设置视图以指定类型,从而使您的ViewData键入,但我只是想知道。对ViewData有如此多的支持,但我知道ViewModel是一种更加抽象和分离的方式,也是一种类型化的方式。我只是不想在需要抓取某些数据的场景中做得很短,例如可以从其他对象(如HtmlHelper类)轻松访问的ViewData。
思考?标准是什么?经验?我有点关闭或者你只是使用一个组合,并且在其他情况下仍然使用ViewData,而不仅仅是将数据从Controller发送到View或者什么?
如果您根本没有使用ViewData,而是将ViewModel与控制器一起使用,那么您使用ViewModel似乎全有或全无,因此ViewData没有任何用途,因为您没有使用ViewModel你的控制器,所以它在那一点上没有用?我混淆了任何人或离开这里吗?这让我自己感到困惑,这是肯定的。
答案 0 :(得分:2)
嗯,ViewData是一种非常快速的实现方法。但是,你正在做很多字符串文字传递,这通常不是一件好事。您可以通过使用一些字符串常量来解决这个问题,这是我对Session变量所做的,但我认为ViewModel是一种更好的方法。只要您可以使用ViewData,您还可以使用ViewModel。 ViewModel不必只是您的域对象;它可以是一个辅助类,它不仅具有域对象,还有一些特定于视图的额外属性;这就是为什么它在那里。因此,使用ViewModel,您可以让编译器帮助您,从OO的角度来看,它比将密钥传递到字典更清晰。
我认为MVC在这里提供了一个很好的方法。它为那些需要“完成它”和更简洁的方法提供了快速和肮脏的(不一定是坏事),两者都非常容易使用。
如果您还没有阅读过Scott Gurthie的ASP.NET MVC教程;我强烈推荐它:
答案 1 :(得分:1)
现在,视图模型被认为是有用的编程模式。阅读Stephen Walther撰写的这篇文章,例如:ASP.NET MVC Tip #50 – Create View Models