在 ASP.NET MVC 5 中搭建外部模型
Posted
技术标签:
【中文标题】在 ASP.NET MVC 5 中搭建外部模型【英文标题】:Scaffolding an external model in ASP.NET MVC 5 【发布时间】:2016-01-23 22:29:06 【问题描述】:我在外部程序集中有一个简单的域模型。此模型使用 DTO 与几个服务类进行通信。它不使用实体框架。
在 Visual Studio 2012 中,我可以在“添加视图”对话框中选择我的 DTO,并为它们构建强类型视图。
但是,DTO 没有显示在 Visual Studio 2013 的“添加视图”对话框中。
我手动创建的强类型视图工作得很好,所以问题不在于 Razor / MVC 看不到或使用我的 DTO。问题只是脚手架。
任何帮助将不胜感激。
【问题讨论】:
我想出了一个技巧。我在 Models 文件夹中创建了一个与我的 DTO 具有相同属性的类,然后从中创建了视图。然后我进入每个视图并将模型改回我的 DTO。当我拥有所需的所有视图时,我删除了 Models 文件夹中的类。仍在寻找真正的解决方案。 @Cory 这是重复的***.com/a/20480300/495455吗? 看看Visual Studio 2013 Pro Add View does not show a referenced Data Access Class Library Model in the Model Class drop down list.。建议的解决方法是使用项目参考。 @JeremyThompson:不完全;我有“添加控制器”和“添加视图”菜单选项,但出现的对话框似乎只列出了模型类下拉列表中解决方案中的类,而不是外部程序集引用。我意识到这可能是为了防止列表长到一百万个类,但看起来对话框应该让你输入一个完全限定的类名(你可以,但 OK 按钮仍然禁用)并仍然为它搭建脚手架。 【参考方案1】:因此,您的 DTO 位于项目命名空间或 .Models 命名空间之外的其他位置。下拉列表具有从那里为强类型视图拉类的亲和力。我意识到您的 DTO 可能存在于另一个程序集中,并且您的 hack 是什么,但是有没有办法将它们重新编译到另一个程序集中的 MvcDemo.Models 命名空间中,并在 MVC 项目的模型命名空间中声明一个部分类?这可能不是理想的答案,如果您不喜欢这个想法,我很乐意删除我的答案。
【讨论】:
部分类不能跨越程序集,即使它们共享相同的命名空间,所以很遗憾我认为这不会起作用。以上是关于在 ASP.NET MVC 5 中搭建外部模型的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 5 MVC 6 RC1 API 中的自定义模型绑定异常
如何在 asp.net mvc 5 中返回模型和参数中的另一个动作?