Asp.net mvc数据模型或视图模型

时间:2013-12-19 08:18:10

标签: asp.net-mvc-3 viewmodel datamodel

我是asp.net mvc技术的新手,对如何渲染视图有疑问。在我的项目中,我需要从数据库中检索XML文件(XML字符串)。获取此XML字符串后,我将xml反序列化为一个对象,比如LogMessage,我已经定义了它。一旦我有了这样一个LogMessage对象,我想通过一个视图向用户显示它的内容。此外,我需要先处理一些LogMessage属性,然后再向用户显示它们。例如,(1)LogMessage对象中有一个logTime属性,它是utc格式,我需要将其转换为本地时间,(2)有一个logCode属性,格式为int number( 1,2,3等),我需要将每个数字转换为有意义的名称,例如eventStart,eventEnd等。

我现在想到的是我在asp.net mvc3中创建了一个强类型视图(LogMessage类型),这样我就可以用Razor渲染视图了。此外,我将所有必要的功能(例如,将utc时间转换为本地时间,将代码编号映射到其有意义的名称等)放在同一视图文件中,并在渲染视图时调用它们。

但是我不确定是否应该按照上述方式进行,或者我应该创建另一个视图模型,比如说LogMessageViewModel(因为我认为实际上LogMessage是我的数据模型?)。然后,一旦我获得了LogMessage对象,我就可以创建一个LogMessageViewModel(并且LogMesageViewModel看起来与LogMessage非常相似),并使用LogMessage初始化LogMessageViewModel并在我的Controller或Model中执行所有必要的转换,而不是在View中执行它们。然后,现在我在视图的LogMessageViewModel中拥有所有正确的信息,并创建LogMessageViewModel的强类型视图,并简单地呈现视图并向用户显示其内容。

有人能给我一些关于这两种不同方法的建议吗?或者还有其他一些更好的方法?

3 个答案:

答案 0 :(得分:0)

  

用于将Web窗体页面呈现给响应的Razor view engine

请到这里:ASP.NET MVC View Engine Comparison

该链接可以帮助您解决问题

并参考:Rendering ASP.NET MVC Razor Views

答案 1 :(得分:0)

如果您需要除了模型信息之外需要提供的更多信息,总是建议使用ViewModels

如果需要进行任何其他处理,您可以在视图模型中执行此操作。

然后,您可以使用视图模型创建一个强类型的视图。

跳这有助于..

如果您不使用模型,则需要使用视图数据将所有转换逻辑,附加数据发送到视图。

这会使控制器变胖。

最佳做法是尽可能减少控制器的使用。

因为,考虑单一责任原则。控制器的责任只是转移控制而不是其他任何东西

* *结论: * 建议在您的方案中使用ViewModel ***

希望这会有所帮助..

答案 2 :(得分:0)

保持DB层和UI层分开是一个好习惯。

当您从数据库获取数据并将其存储在DataContract(在您的情况下为LogMessage)时,使用automappers将其映射到类似的视图模型(LogMessageViewModel)。然后在视图中使用viewModel。

流程就像这样

  

DB-> XML值 - > LogMessage(DataContract / Domain Object) - >运用   AutoMapper - > LogMessageViewModel->图