【发布时间】:2010-07-26 06:36:54
【问题描述】:
在我的项目中,我本着以下精神强类型化了 viewdata:
AppleListViewData : ViewDataDictionary
+ SelectedTheme
+ ThemeList
+ SelectedApple
+ AppleList
前四个在所有视图数据中重新出现,因为它们在 site.master 中使用
为了保持干燥,我将它们提升为另一个继承自的 BaseViewData 类。
现在我所有的控制器都需要填写这些属性。同样,为了保持干燥,我为我的控制器创建了一个 BaseController 来承担这项工作。
BaseController : Controller
+ new ViewData : BaseViewData
+ FetchThemes
+ FetchSelectedTheme
BaseController.ViewData 是新的,因为它隐藏了 Controller.ViewData 所有控制器都负责在构造函数时更新视图数据。
我实际上是在隐藏现有的 viewdata 系统并用我自己的替换它。
这就是我觉得我做错了什么的地方。
有什么建议可以让我以更优雅的方式完成这项工作吗?
【问题讨论】:
-
在我看来,您似乎重新发明了强类型视图。我不明白这一点。如果您愿意,您已经可以拥有一个强类型模型。
-
但是如何使用现有的强类型视图和基本视图的概念呢?
-
如果需要,您可以使用动作过滤器 / 在执行结果之前注入通用视图数据。
-
你的意思是以弱的方式添加它们?
-
不,您可以以任何您喜欢的方式添加它们——添加到模型属性、自定义属性等等。如果这是你想要的,那就是弱,否则就是强。关键是不要在控制器中执行此操作,而是在操作过滤器中执行此操作,因为它遵循 SRP 并且不会创建并行层次结构。
标签: c# .net asp.net-mvc oop