我得到了:
类型'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文件夹之外,如果这很重要的话。
答案 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个基本步骤
_ViewStart.cshtml
发表评论。索引视图中以下语句的含义:
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继承。