添加View Model类下拉列表不显示我的类

时间:2012-03-12 13:42:16

标签: asp.net-mvc visual-studio-2010

我已经创建了一个新的C#asp.net mvc 4.0(beta)Internet应用程序,我在Visual Studio 2010(sp1)的“添加视图”对话框中有一些奇怪的行为。 当我决定创建强类型视图时,在“添加视图”对话框中,“模型”类下拉列表不会显示我的ViewModel类。

对于记录,是的,我在触发“添加视图”对话框之前编译了应用程序。

我相信我已经确定了问题,但不知道如何解决它。 如果有人关心重现行为,下面是重复步骤:

  1. 在Visual Studio 2010(sp1)中,创建一个新的C#asp.net MVC 4.0 (测试版)互联网应用程序。
  2. 在Models文件夹中,创建一个名为的新简单类 “GazouViewModel.cs”
  3. 构建应用程序,打开HomeController,右键单击 Index()ActionResult并选择Add View ...
  4. 在“添加视图”对话框中,选中“强类型视图”复选框 在Model类:下拉列表中,您会注意到您的“GazouViewModel”

    1. 在解决方案资源管理器中,右键单击您的项目,然后选择“管理” NuGet包“
    2. 搜索,查找并安装“Bootstrapper.Autofac”软件包。
    3. 重建应用程序并验证您的“GazouViewModel”是否仍然存在 显示在“添加视图”下拉列表对话框中。
    4. “GazouViewModel”仍应显示在下拉列表中。

      1. 在解决方案资源管理器中,右键单击您的项目,然后选择“管理” NuGet包“
      2. 搜索,查找并安装“Autofac ASP.NET MVC4(Beta) 整合“包。
      3. 重建应用程序并验证您的“GazouViewModel”是否仍然存在 显示在“添加视图”下拉列表对话框中。
      4. “GazouViewModel”仍应显示在下拉列表中。

        1. 在解决方案资源管理器中,右键单击项目并添加新类 (Class1.cs)无所谓。
        2. 让Class1实现IAutofacRegistration并实现 接口
        3. 重建应用程序并验证您的“GazouViewModel”是否仍然存在 显示在“添加视图”下拉列表对话框中。
        4. “GazouViewModel”不再显示在Model类中 下拉列表。
        5. 看来,只要我创建一个实现IAutofacRegistration接口并构建应用程序的类,我就不再能够在该下拉列表中查看我的ViewModel。

          任何人都可以确认他们是否和我一样得到了相同的结果吗? 更重要的是,如何解决这个问题?

          重要:我在mvc 3.0应用程序中尝试了完全相同的步骤,并且发生了完全相同的行为......所以这与BETA版本无关。

          此致 文斯

9 个答案:

答案 0 :(得分:15)

如果收到错误消息:“正在运行转换:输入文件似乎使用此模板不支持的架构版本。这可能导致编译错误。请使用'添加新生成的项'添加更新的模板”

您使用的是EF 5.x.您必须将EF 5.x的元数据添加到T4模板。在文件头中调用DefineMetadata()

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#><#

DefineMetadata();

位于模板底部的创建方法

private void DefineMetadata()
{
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_NAME] = "CSharpDbContext.Types";
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_VERSION] = "5.0";
    TemplateMetadata[MetadataConstants.TT_MINIMUM_ENTITY_FRAMEWORK_VERSION] = "5.0";
}

答案 1 :(得分:9)

我解决了这个问题,在2个小时内疯了,然后从解决方案中的Properties-folder中删除Assembly.cs。在我重建了解决方案之后,“添加视图”模型 - 下拉突然显示可以找到我所有的ViewModel,这很奇怪。

我想Assembly.cs中定义的程序集版本与项目中使用的实际版本混淆了。无论如何,它现在适用于我的情况。

答案 2 :(得分:3)

对我来说有用的是在创建模型后简单地构建解决方案。然后我能够在下拉列表中找到我的模型。

答案 3 :(得分:2)

我也注意到了这个问题(在Visual Studio 2010上使用MVC 4 Beta)。重新启动Visual Studio为我解决了这个问题。

答案 4 :(得分:1)

更新:在撰写本文时,我无法再重现此错误。也许我使用的NuGet包已经更新到更新的版本并偶然修复了错误。

我会将这篇文章标记为已关闭。

感谢大家对此的意见!

文斯

答案 5 :(得分:1)

只需清理并构建您的解决方案。它对我有用。

答案 6 :(得分:1)

另一种解决方案是添加到堆中,因为其他任何一种都不适合我。这是Visual Studio在处理长文件路径和命名空间方面很糟糕的另一个例子。

在我的情况下,命名空间太长而无法显示在&#34; Model类&#34;落下。缩短命名空间(本身就是一种荒谬的痛苦)使得下拉工作再次发挥作用!

答案 7 :(得分:0)

使用VS 2010和MVC 3.0,Add View Model类下拉列表一度没有为我显示任何类。伊万建议重启VS似乎对我有用。

我尝试删除AssemblyInfo.cs,做了一个Clean和一个Rebuild,但那些没有解决问题。当我重新启动VS时,模型类又回到了下拉列表中。

答案 8 :(得分:0)

我意识到这有点过时了。我有类似的情况,我的课程不会加载到视图模板向导。我使用VS 2012和MVC3。团队中的其他人都很好,幸运的是老我有问题。经过大量的研究和尝试很多事情,唯一一直在修复它的是在安全模式下运行VS(从命令提示符:&#34; C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ devenv .exe&#34; / safemode)。我的一个扩展程序必须导致问题,并且在安全模式下运行那些未加载的。