9

我正进入(状态:

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

4

9 回答 9

3

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

而是试试这个:

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

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

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

于 2017-08-18T12:37:13.360 回答
2

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

看起来我在重新组织我的项目时遇到了复制粘贴错误。

于 2013-03-24T02:24:55.680 回答
2

我将 cshtml 行从:

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

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

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

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

于 2018-03-14T22:16:54.217 回答
1

对我有用的是添加...

@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都是 type System.Web.Mvc.WebViewPage。这System.Web.Mvc.ViewSTartPage与错误的类型不同。放在@inherits System.Web.Mvc.ViewStartPage开头_ViewStart.cshtml显式指定所需的类型_ViewStart.cshtml

于 2019-04-20T21:13:38.117 回答
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-s。

于 2014-04-15T07:41:10.897 回答
0

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

于 2017-10-29T16:21:04.693 回答
0

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

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

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

    并将其标记为评论:

    //Layout = "~/Views/_ViewStart.cshtml";
    
于 2018-01-04T06:40:56.330 回答
-1

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

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

using System.Web.Mvc;

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

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

@{
    Layout = null;
 }

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

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

于 2013-03-24T01:42:42.237 回答
-4

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

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

于 2016-06-20T08:54:12.713 回答