【问题标题】:To use ViewData or not to use ViewData使用 ViewData 或不使用 ViewData
【发布时间】:2009-06-17 03:20:25
【问题描述】:

我一直在阅读专业的 ASP.NET MVC 1.0 书以及其他有关使用 ViewModel 而不是 ViewData 从控制器到视图的资源。但是后来我看到有很多 ViewData 的例子被用在那些除了从 ViewData 中获取东西之外别无他法的艰难场景中。但后来我读了一本像 Pro ASP.NET MVC Framework 这样的书,他只谈论 ViewData,没有关于 ViewModel。那么 ViewModel 是一个非常新的概念还是什么?

我看到 ViewModel 是一种更好的方法,但它是一个可靠的替代方案吗?我的意思是 ViewData 在 其他 事物中很容易为您提供,例如 ViewModel 没有的 HtmlHelper 对象。或者例如在自定义控件中使用它 (http://www.codeproject.com/KB/custom-controls/MVCCustomControls.aspx)。那么我是根据不同的目标使用两者的组合还是什么?如果我出于某种原因想在我的 Extension 方法中访问 ViewModel 怎么办?我在这里迷失了要走的路。我知道 ViewData 不是强类型的,但是您可以设置视图以指定类型,从而使您的 ViewData 类型化,但我只是想知道。有很多对 ViewData 的支持,但我知道 ViewModel 是一种更加抽象和分离的方式,就像它被键入一样。我只是不想在需要获取某些数据(例如 ViewData)的情况下缩短自己的时间,这些数据可以从其他对象(例如 HtmlHelper 类)轻松访问。

想法?标准?经验?我是不是有点跑题了,还是你只是使用一个组合并且在其他情况下仍然使用 ViewData,而不仅仅是从你的控制器发送数据到你的视图或什么?

如果您根本不使用 ViewData 而是将 ViewModel 与您的控制器一起使用,那么您使用 ViewModel 似乎是全有或全无,因此 ViewData 没有任何用途,因为您没有使用任何来自你的控制器,所以它在那个时候没有用??我在这里混淆了任何人或方式吗?这是肯定的。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    嗯,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

    【讨论】:

    • 我不是在谈论 ViewData.Model。我说的是存在于视图和控制器“ViewModels”之间的额外类层,它们负责从模型中获取某些对象,以便控制器可以使用它们而不是控制器从模型层抓取项目。跨度>
    【解决方案2】:

    现在视图模型被认为是有用的编程模式。阅读 Stephen Walther 的这篇文章,例如:ASP.NET MVC Tip #50 – Create View Models

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多