我一直在阅读专业ASP.NET MVC1.0的书籍,以及其他有关从控制器到视图使用ViewModel而不是ViewData的信息。但是,我看到了很多例子,说明ViewData被用于一些很困难的场景中,在这些场景中,除了从ViewData中获取某些东西之外,没有其他方法。但后来我读了一本类似Pro ASP.NET MVC框架的书,他所谈论的只是ViewData,没有关于ViewModel的内容。那么,ViewModel是一个非常新的概念还是什么?
我看到ViewModel是一种更好的方法,但它是一个可靠的替代方法吗?我的意思是,ViewData在中是很容易获得的,其他的东西,比如HtmlHelper对象,ViewModel是没有的。或者,例如,在自定义控件(http://www.codeproject.com/KB/custom-controls/MVCCustomControls.aspx)中使用它。那么,我是否根据不同的目标或什么使用两者的组合呢?如果我想以任何理由访问我的扩展方法中的ViewModel,该怎么办?我不知道该走哪条路。我知道ViewData不是强类型的,但是您可以将视图设置为指定类型,从而使ViewData类型化,但我只是想知道。对ViewData的支持如此之多,但我知道ViewModel是一种更加抽象和分离的方式,与被键入的方式一样。我只是不想在需要从其他对象(如ViewData类)轻松访问的特定数据(如HtmlHelper )的场景中缩短自己的时间。
有什么想法?标准?经验?我是不是有点错了,或者您只是使用组合体,在其他情况下仍然使用ViewData,而不仅仅是将数据从Controller发送到您的视图或什么的呢?
如果您根本没有使用ViewData,而是在控制器上使用ViewModel,那么您使用的是ViewModel,因此ViewData没有意义,因为您没有将它与控制器中的任何东西设置在一起,所以在那个时候没有用吗?我是把这里的人搞糊涂了还是离这里很远?把我自己弄糊涂了,这是肯定的。
发布于 2009-06-17 04:36:17
嗯,ViewData是一个非常快速的实现方法。但是,您正在执行大量字符串文字传递,这通常不是一件好事。您可以通过使用一些字符串常量来解决这个问题,这就是我对会话变量所做的事情,但是我认为在这里,ViewModel是一个更好的方法。任何时候都可以使用ViewData,也可以使用ViewModel。ViewModel不一定只是您的域对象;它可能是一个助手类,它不仅具有域对象,而且还具有特定于您的视图的一些额外属性;这就是它存在的原因。因此,有了ViewModel,编译器就可以帮助您--显然,从面向对象的角度来看,它比只传递字典的键要干净得多。
我认为MVC提供了一种很好的方法。它为那些需要“完成它”的人提供了快速和肮脏(不一定是一件坏事)的工具,并且提供了一种更干净的方法,这两种方法都很容易使用。
如果您还没有读过Scott的ASP.NET MVC教程,我强烈建议您:
http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx
发布于 2009-06-17 05:33:56
现在,视图模型被认为是有用的编程模式。阅读Stephen的这篇文章,例如:ASP.NET MVC提示#50 -创建视图模型
https://stackoverflow.com/questions/1004948
复制相似问题