【问题标题】:VS2015/ASP.NET MVC 5: Can't set model type on ASPX viewsVS2015/ASP.NET MVC 5:无法在 ASPX 视图上设置模型类型
【发布时间】:2015-11-05 07:30:17
【问题描述】:

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

我尝试了一个从头开始制作的干净项目,但出现了同样的错误,因此重现起来相当简单:

  1. 文件 > 新建 > 项目。
  2. 创建一个新的 ASP.NET Web 应用程序项目。
  3. 选择 ASP.NET 4.6 模板 > MVC,然后单击确定。
  4. Views\Home 中创建一个.ascx 文件。 (请注意,VS2015 没有创建此类文件的工具,因此您必须创建一个文本文件并重命名它或其他内容。)它应该包含:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TestClass>" %>

要么创建一个新模型类(就像我对 TestClass 所做的那样),要么使用项目中包含的预构建身份模型之一。

  1. 添加对@Html.Partial("&lt;your_user_control&gt;") 的呼叫到Home/Index.cshtml
  2. 运行项目。

这是我执行上述操作时得到的:

这是我正在使用的 VS2015 版本:

我已尝试搜索可能发现此问题的所有可能的搜索排列,但我只能找到确认 VS2015/MVC5 确实支持 ASPX/ASCX 视图的帖子,或有关旧版本 MVC 的帖子。

有什么解决办法吗?

【问题讨论】:

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


    【解决方案1】:

    C# 编写的泛型类型声明(如ViewUserControl&lt;TestClass&gt;)必须进入C# 代码隐藏文件。否则,您必须指定 CLR 类型名称:

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

    【讨论】:

    • 这是否在某个时候发生了变化?我遇到问题的这些视图在我的 VS2013/MVC3 项目中都可以正常工作。
    • 例如,刚刚打开我的 VS2013 版本的项目,这不会导致那里出现错误:&lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl&lt;IEnumerable&lt;SelectListItem&gt;&gt;" %&gt;
    • 如果它适用于以前的 MVC 版本(这不是我所知道的),将问题提交给 MS 可能是个好主意,因为它可能是最新 ASP.NET 中的一个错误工具。
    • 我的意思是,从 ASP.NET MVC v1 开始就支持 ASPX 视图引擎。我找不到任何说它已被删除的内容。
    【解决方案2】:

    事实证明,您需要确保 web.config(您的项目的基础配置,或者基础 Views 文件夹中的配置以及您所有区域的配置)在某处具有以下内容:

    <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 找到了上述内容。

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2015-01-28
      • 2010-11-18
      • 2017-10-31
      • 2019-01-23
      • 1970-01-01
      相关资源
      最近更新 更多