asp.net-mvc – 使用ViewData或不使用ViewData

我一直在阅读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没有任何用途,因为您没有使用控制器设置任何内容,因此它在那一点没用?我混淆了任何人或离开这里吗?这让我自己感到困惑,这是肯定的.

解决方法

好吧,ViewData是一种非常快速实现方法.但是,你正在做很多字符串文字传递,这通常不是一件好事.您可以通过使用一些字符串常量来解决这个问题,这就是我对Session变量所做的事情,但我认为viewmodel是一种更好的方法.只要您可以使用ViewData,您还可以使用viewmodel. viewmodel不必只是您的域对象;它可能是一个辅助类,它不仅具有域对象,还有一些特定于视图的额外属性;这就是为什么它在那里.因此,使用viewmodel,您可以让编译器帮助您,并且从OO的角度来看,它比将密钥传递到字典要简单得多.

我认为MVC在这里提供了一个很好的方法.它为那些需要“完成它”和更简洁的方法提供了快速和肮脏(不一定是坏事),这两者都非常容易使用.

如果您还没有阅读Scott Gurthie的ASP.NET MVC教程;我强烈推荐它:

http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx

相关文章

ASP.NET与IIS是紧密联系的,由于IIS6.0与IIS7.0的工作方式的...
在之前的ASP.NET是如何在IIS下工作的这篇文章中介绍了ASP.NE...
这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...