【问题标题】:Best practices regarding locations for ASP.NET MVC models关于 ASP.NET MVC 模型位置的最佳实践
【发布时间】:2009-06-01 14:00:02
【问题描述】:

是否有涵盖应该定义 ASP.NET MVC 模型的地方的最佳实践?

一个新的 ASP.NET MVC 项目有一个漂亮整洁的 Models 文件夹供它们进入,但在生产环境中它们可以来自其他地方:

  • 第三方类库
  • WCF 服务

强类型视图使用在这样的位置定义的类是否可以接受?

【问题讨论】:

    标签: asp.net-mvc model


    【解决方案1】:

    在我从事过的每个项目中,ASP.NET MVC 模型的视图模型比传统意义上的模型更多。我还没有一个项目可以使用我在数据访问中使用的相同模型来访问我的视图模型。大多数页面上需要显示的其他信息太多了。因此,出于这个原因,我要么将我的模型存储在模型文件夹中,要么将它们与我的所有其他 MVC 特定类一起存储在一个单独的库中。

    【讨论】:

    • 为此,我经常使用 viewdata 类——控制器抓取不同类型的适当模型并在 viewdata 类中创建它们的合成,然后将其传递给强类型视图。
    • 您是否定义了全新的视图模型类,这些视图模型类继承自您的数据模型类或由您的数据模型类初始化,还是使用部分类?
    • 我的视图模型通常是全新的类,它利用数据模型作为视图模型的属性等等。
    【解决方案2】:

    我不知道您将模型放入 WCF 服务的确切含义。如果您的意思是使用公开您需要的模型对象的 WCF 服务,那将起作用。

    关于保存模型、视图和控制器的单独类库,我认为这是一种非常常见的方法并且效果很好。事实上,我相信当您的应用程序的规模和复杂性增加时,这确实是一项要求。这是 MVC 应用程序中不同逻辑组件的一种物理分离

    【讨论】:

    • 是的,我的意思是我的模型对象是通过 WCF 服务公开的。
    • @Richard E:在这种情况下,当您向项目添加服务引用时,本质上您是在程序集中自动生成模型类,因此问题归结为您的“第三方类库与否”的问题。
    【解决方案3】:

    我发现的一个问题是,除非模型是在 Web 项目中定义的,否则在使用标记中指定的强类型视图时,VisualStudio 似乎无法找到它。我的模型通常在一个单独的项目中定义,我发现要使用强类型视图,我需要创建一个代码隐藏,以便我有一个派生自强类型 ViewPage 的类。然后我更改标记并将其与此类关联。

    【讨论】:

    • 我没有遇到任何这些问题。您是否从您的 Web 应用程序中正确引用该项目,并确保它们具有相同的根命名空间(或正确引用其他命名空间)?
    • 我会再次检查,但是是引用了另一个项目——但是它们没有相同的根命名空间。
    【解决方案4】:

    您需要将命名空间导入到视图页面。这确实需要代码隐藏页面。

    使用指令

    <%@ import namespace='your.namespace.here' %>
    

    紧接在&lt;@ Page..... 指令之后

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      相关资源
      最近更新 更多