【问题标题】:Add View Model class dropdown not showing my class添加视图模型类下拉列表不显示我的类
【发布时间】:2012-03-12 13:42:16
【问题描述】:

我创建了一个新的 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 类中 下拉菜单。

似乎一旦我创建了一个实现 IAutofacRegistration 接口的类并构建了应用程序,我就无法再在该下拉列表中查看我的 ViewModel。

谁能确认他们得到的结果是否与我相同? 更重要的是,如何解决这个问题?

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

真诚的 文斯

【问题讨论】:

  • 如果其他人可以复制我会调查。得到确认后给我发短信。
  • 我可以复制。 VS2010 SP1。 MVC4 测试版。干净安装。如果我评论 IAutofacRegistration 实现,它会突然开始工作。很奇怪。
  • 这里也一样,我在重现这些步骤时遇到了同样的问题。我认为这是一个反对使用非常强大的 Autofac 模块和 Bootstrapper 的情节(或者可能不是,谁知道^^)
  • 我也遇到了同样的问题!我还收到消息:“正在运行转换:输入文件似乎正在使用此模板不支持的架构版本。这可能会导致编译错误。请使用“添加新生成的项目”添加更新的模板”
  • 您提到它没有显示在下拉列表中,但是如果您手动创建视图并将其手动分配给模型,它仍然有效吗?

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


【解决方案1】:

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

您使用的是 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! :D
【解决方案2】:

我在 2 小时内发疯,然后从解决方案的 Properties 文件夹中删除了 Assembly.cs,从而解决了这个问题。在我重新构建解决方案后,“添加视图”模型下拉菜单突然可以找到我所有的 ViewModel,这很奇怪。

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

【讨论】:

  • 我没有尝试过您的解决方案,因为我无法再重现错误,这很可能是由于 NuGet 包已更新……但感谢您分享您的发现。
  • 刚刚重建对我来说效果很好,无需删除 Assembly.cs!
  • 刚刚也遇到了这个问题,重建对我有用(Visual Studio 2012 Ultimate)
  • 您的解决方案非常适合我(在 VS 2012 终极版中)。我重建了程序,但这并没有解决问题。当我删除 assembly.cs 并重建解决方案时,它就起作用了。
  • 在 VS2010 中为我工作。删除 AssemblyInfo.cs,重新设置项目的属性。
【解决方案3】:

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

【讨论】:

  • 对我来说,我只是这样做了,但它没有用我关闭了 vwde 并再次打开它并且它有效
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    只是另一种解决方案,因为其他解决方案都不适合我。这是 Visual Studio 在处理长文件路径和命名空间方面表现糟糕的另一个例子。

    在我的情况下,命名空间太长而无法显示在“模型类”下拉列表中。缩短命名空间(这本身就是一种可笑的痛苦)使下拉菜单再次起作用!

    【讨论】:

    • 另一种可能的解决方案,甚至在模型处于依赖关系而不是项目本身时也有效:创建一个子类,(在您的情况下,在较短的命名空间中);创建视图后,您可以轻松地将 @model 声明更改为指向父类,并删除子类 --- 或不。
    【解决方案6】:

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

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

    感谢大家对此的意见!

    文斯

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        使用 VS 2010 和 MVC 3.0,添加视图模型类下拉菜单有时没有为我显示任何类。伊万重新启动 VS 的建议似乎对我有用。

        我尝试删除 AssemblyInfo.cs,进行了清理和重建,但这些都没有解决问题。当我重新启动 VS 时,模型类又回到了下拉列表中。

        【讨论】:

          【解决方案9】:

          我意识到这有点过时了。我有类似的情况,我的类不会加载到 View Template 向导中。我将 VS 2012 与 MVC3 一起使用。团队中的其他人都很好,只是幸运的是,老我有问题。经过大量研究和尝试很多事情后,唯一始终如一地修复它的是在安全模式下运行 VS(从命令提示符:“C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe” /安全模式)。我的其中一个扩展程序一定是导致问题的原因,并且在安全模式下运行时未加载这些扩展程序。

          【讨论】:

          • 试一试,但它首先禁用了我用来枚举模型的实体框架脚手架。活到老,学到老。不过,我很欣赏这个小费。我一直忘记 VS 甚至还有安全模式。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          • 1970-01-01
          相关资源
          最近更新 更多