类型'ASP._Page_index_cshtml'不继承自'System.Web.WebPages.WebPage'

时间:2013-03-24 01:25:05

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

我得到了:

  

类型'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文件夹之外,如果这很重要的话。

9 个答案:

答案 0 :(得分:3)

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

在重新组织项目时,我看起来有一个复制粘贴错误。

答案 1 :(得分:2)

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

而是试试这个:

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

在我的情况下,在webproject的根目录下,我有一个额外的_ViewStart.cshtml副本(从项目中排除),我删除了该文件,这就行了。

希望它有所帮助,让我知道这是否也可以解决您的问题。

答案 2 :(得分:1)

我从:

更改了cshtml行
Layout = "~/Views/_ViewStart.cshtml";

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

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

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

答案 3 :(得分:0)

可能是旧版本的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。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

无需采取紧张措施。只需遵循2个基本步骤

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

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

    并将其标记为评论:

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

答案 6 :(得分:0)

对我有用的是添加...

@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所需的类型。

答案 7 :(得分:-1)

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

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

using System.Web.Mvc;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

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

@{
    Layout = null;
 }

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

作为旁注,所有这些都假设您没有使用默认路由。

答案 8 :(得分:-4)

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

当您从该文件夹中包含Partial1.cshtml时,它还包含来自其中的web.config。而web.config表示所有页面都必须从WebViewPage继承。