首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更容易将数据传递给视图(ASP.NET MVC)

更容易将数据传递给视图(ASP.NET MVC)
EN

Stack Overflow用户
提问于 2010-07-04 21:07:52
回答 4查看 109关注 0票数 0

我经常需要将“复杂的”数据传递给我的视图:不同的数据库对象、类等等。我厌倦了创建许多像这样的类助手。

代码语言:javascript
复制
class StatsPageViewData
{
    public User User { get; set; }
    public Something Something { get; set }
    // blah blah
}

当然,我不能只使用ViewData的“something”,它就是不太舒服。

所以我的问题是,有没有办法让这个过程变得更容易,以某种方式使其自动化?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-05 01:38:21

视图模型很少应该只是一个域类的集合。首先,将域类放入视图模型是一个很大的话题;许多人认为您不应该这样做。您的视图可能不需要完整的用户实例,只需要一个名称。如果您在视图模型中保留完整的用户实例,则会隐藏真实视图模型的意图,使其难以重用,等等。您最好使用string UserName属性来正确格式化名称,而不是访问视图中的用户属性并在视图中对其进行格式化。

这是一个理论,没有人的来遵循它;但保留在内存中并尝试实现它是很好的。

其次,视图模型不应该仅仅是域类的集合,因为它们应该提供视图语义--例如,验证属性和其他表示逻辑。您可以使用聚合属性来提供选择列表的数据、格式等。另一个例子是,POST视图模型可以具有将原始表单数据转换为实体的方法。

您应该将一些表示逻辑从视图和/或控制器移到视图模型中-格式化、仅由视图需要的属性,等等。控制器不应该将实体集合转换为视图模型数据集合-视图模型应该这样做。视图不应将格式用户转换为单一名称和地址字符串-视图模型应转换。

这样做,您就不会厌倦创建“视图模型”类,因为它们不再是愚蠢的,您的工作也不会是转储和/或重复的。视图模型类与应用程序中的其他类一样重要。

票数 1
EN

Stack Overflow用户

发布于 2010-07-04 21:11:42

使用诸如ReSharper之类的插件来帮助您创建这些帮助程序类。

首先使用类和属性。这将在编辑器中将它们标记为缺失,然后您可以使用插件来创建类和属性,从而使帮助器类的创建速度比反过来快得多。

票数 1
EN

Stack Overflow用户

发布于 2010-07-04 21:14:37

我认为model-per-view模式是一种最佳实践。您可以尝试在可能的情况下使用继承和组合来共享模型组件(保持代码干燥),但我在这方面也只取得了有限的成功。要使视图模型到业务模型的转换变得更容易,您可以尝试使用AutoMapper之类的工具。我对唯一一个能从中受益的大项目太过投入,无法应用它,但我一直在寻找一些东西来简化这个过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3174758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档