【问题标题】:Type 'ASP._Page_index_cshtml' does not inherit from 'System.Web.WebPages.WebPage'类型“ASP._Page_index_cshtml”不继承自“System.Web.WebPages.WebPage”
【发布时间】:2013-03-24 01:25:05
【问题描述】:

我得到:

类型“ASP._Page_index_cshtml”不继承自“System.Web.WebPages.WebPage”。

当我浏览到我的 index.cshtml 文件时。很简单:

@using System.Web.Optimization
@inherits System.Web.Mvc.WebViewPage
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width">
    <title>Hello World</title>
    @Styles.Render("~/Content/css", "~/Content/themes/base/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    @Scripts.Render(
        "~/bundles/jquery",
        "~/bundles/jqueryui"
    )
</body>
</html>

我的 index.cshtml 文件位于 Views 文件夹之外,如果这很重要的话。

【问题讨论】:

    标签: asp.net asp.net-mvc razor asp.net-mvc-4


    【解决方案1】:

    不要删除继承,这可能是必要的,并且可能会在将来导致另一个问题。

    试试这个:

    在失败的 Web 项目中启用“查看所有文件”,然后搜索看起来正确但未包含在 Visual Studio 中的文件,然后将其删除。如果它在您的部署文件夹中失败,请尝试清理该文件夹,然后重新部署站点,您可能有可能导致相同问题的不必要文件。

    在我的例子中,在 web 项目的根目录中,我有一个额外的 _ViewStart.cshtml 副本(从项目中排除),我删除了该文件,然后就成功了。

    希望对您有所帮助,如果这也解决了您的问题,请告诉我。

    【讨论】:

    • 正是发生在我身上的事情。我有一个错误的 FTP 上传,我将 _ViewStart.cshtml 放在目录的根目录中,而不是在 /Views/ 中。希望这对某人有所帮助。
    • 这对我也有帮助。就我而言,我不小心将 web.config 从我的 Views 文件夹移动到了它下面的 Home 文件夹。当我把它移回来时,应用程序又开始工作了。
    【解决方案2】:

    我只需要删除:@inherits System.Web.Mvc.WebViewPage

    我在重组项目时似乎遇到了复制粘贴错误。

    【讨论】:

    • 这不是解决方案,实际上是导致另一个问题,您有一个隐藏在项目中的额外文件。请参阅我的回答。
    【解决方案3】:

    我将 cshtml 行更改为:

    Layout = "~/Views/_ViewStart.cshtml";
    

    Layout = "~/Views/Shared/_Layout.cshtml";
    

    因为 _ViewStart.cshtml 只包含那一行代码。需要布局文件,因为它包含客户端验证的脚本。

    当我删除该行时它也有效,但我更喜欢保留_Layout.cshtml

    【讨论】:

      【解决方案4】:

      对我有用的是添加...

      @inherits System.Web.Mvc.ViewStartPage
      

      ...到_ViewStart.cshtml 的顶部。

      我认为这对我有用的原因是因为我的 ~/Views/Web.config 文件。我在其中放置了以下代码块,以避免大量@inherits 调用我的视图...

      <configuration>
        <system.web.webPages.razor>
          <pages pageBaseType="System.Web.Mvc.WebViewPage"> <!-- Notice pageBaseType -->
            ...
          </pages>
        </system.web.webPages.razor>
      </configuration>
      

      我认为这指示剃须刀引擎包括_ViewStart.cshtml 在内的所有视图都是System.Web.Mvc.WebViewPage 类型。这与System.Web.Mvc.ViewSTartPage 的类型不同,因此出现错误。将@inherits System.Web.Mvc.ViewStartPage 放在_ViewStart.cshtml 的开头显式指定_ViewStart.cshtml 所需的类型。

      【讨论】:

        【解决方案5】:

        可能是旧版本的 System.Web.WebPages.dll 被加载到内存中,并且它尝试将您的 cshtml 页面从该 dll 转换为 WebPages 类的版本。

        要对此进行测试,请尝试查看当前注册了哪些 http 模块:

        var allModules = HttpContext.Current.ApplicationInstance.Modules;
        for( int i = 0; i < allModules.Count; i++ ) {
            Trace(allModules.GetKey(i));
        }
        

        在我的情况下是:

        ....
        __DynamicModule_System.Web.WebPages.WebPageHttpModule, System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35_bca8e05a-5746-45b0-be95-2b920b455ccf
        
        __DynamicModule_System.Web.WebPages.WebPageHttpModule, System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35_c1a67b42-31a9-47f1-8483-9e712fabe2a7
        

        要解决此问题,您需要替换 /Bin 文件夹中旧版本的 System.Web.WebPages.dll 或其他可能引用它的 dll-s。

        【讨论】:

          【解决方案6】:

          只需删除 _ViewStart.cshtml 并重新添加即可。

          【讨论】:

            【解决方案7】:

            无需紧张。只需遵循 2 个基本步骤

            1. 删除_ViewStart.cshtml
            2. 对评论发表声明。索引视图中以下语句的含义:

              Layout = "~/Views/_ViewStart.cshtml";
              

              并将其标记为评论:

              //Layout = "~/Views/_ViewStart.cshtml";
              

            【讨论】:

              【解决方案8】:

              您为什么要尝试直接浏览到视图?为什么不在视图文件夹中?

              要获得一个基本的“Hello World”页面,您首先需要创建一个名为 HomeController.cs 的控制器:

              using System.Web.Mvc;
              
              public class HomeController : Controller
              {
                  public ActionResult Index()
                  {
                      return View();
                  }
              }
              

              然后创建一个文件/Views/Home/Index.cshtml 并将您的标记放入其中。您可能还需要添加:

              @{
                  Layout = null;
               }
              

              到页面顶部,因为它看起来不像您在使用母版页。

              附带说明,所有这些都假设您没有搞砸默认路由。

              【讨论】:

              • 查看您的评论历史,看起来您不像是我在发布此内容时假设的 MVC 初学者。因此,如果这篇文章显得居高临下,我深表歉意。我认为如果不通过控制器路由,服务器将无法正确呈现视图。当你说 return View();这就是渲染实际发生的地方,这是一个重要的步骤,我认为你不能跳过。
              【解决方案9】:

              从您的 Views 文件夹中删除 web.config。

              当您包含该文件夹中的 Partial1.cshtml 时,它还包含该文件夹中的 web.config。而那个 web.config 是说所有页面都必须继承自 WebViewPage。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2015-03-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多