VS2015 / ASP.NET MVC 5:无法在ASPX视图上设置模型类型

时间:2015-10-30 15:05:39

标签: asp.net-mvc-5 visual-studio-2015

我目前正在尝试将旧版项目从VS2013 / MVC3转换为使用VS2015 / MVC5,而且我遇到了一个问题,其中任何旧的ASPX视图(.aspx / .ascx)设置了强类型模型会导致构建错误。

我尝试过从头开始制作一个干净的项目,并且发生同样的错误,因此重现起来非常简单:

  1. 文件>新>项目
  2. 创建一个新的ASP.NET Web应用程序项目。
  3. 选择ASP.NET 4.6模板> MVC,然后单击“确定”。
  4. Views\Home中创建.ascx文件。 (请注意,VS2015没有工具来创建这样的文件,因此您必须创建一个文本文件并重命名它。)它应该包含:
  5. <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TestClass>" %>

    创建一个新的模型类(就像我对TestClass所做的那样),或者使用项目中包含的一个预构建的Identity模型。

    1. 将来自@Html.Partial("<your_user_control>")的来电添加到Home/Index.cshtml
    2. 运行项目。
    3. 这是我在上面做的时候得到的:

      Server Error screenshot

      这是我使用的VS2015的版本:

      VS2015 version

      我已经尝试搜索可以发现此问题的每种可能的搜索排列,但我能找到的是确认VS2015 / MVC5确实支持ASPX / ASCX视图的帖子,或者关于旧版MVC的帖子

      任何解决方案?

2 个答案:

答案 0 :(得分:1)

C# ViewUserControl<TestClass>编写的泛型类型声明必须进入C#代码隐藏文件。否则,您必须指定CLR类型名称:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl`1[[MyWebApplication.Models.TestClass, MyWebApplication]]" %>

答案 1 :(得分:1)

事实证明,您需要确保web.config(您的项目的基本文件,或您的基本视图文件夹中的文件夹以及所有区域的文件)在其中具有以下内容:

<system.web>
    ...
    <pages
      validateRequest="false"
      pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
      userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <controls>
            <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
        </controls>
    </pages>
    ...
</system.web>

在VS2015中创建的默认项目附带的web.config不包括这个,可能是因为他们假设(并且可能正确地)绿地项目不会使用Web窗体视图引擎。

我通过再次仔细检查ASP.NET MVC 4->5 upgrade docs找到了上述内容。