ASP._page_views_diagnostics_ <page> _cshtml不从System.web.ui.page继承</page>

时间:2011-08-09 18:24:21

标签: asp.net asp.net-mvc

我有一个混合或缓慢移动到mvc的asp.net应用程序,但是当通过路由http://localhost:9490/razor

访问时

我得到Type 'ASP._Page_Views_diagnostics_razor_cshtml' does not inherit from 'System.Web.UI.Page'.

例外详细信息: System.Web.HttpException: Type 'ASP._Page_Views_diagnostics_razor_cshtml' does not inherit from 'System.Web.UI.Page'.

[HttpException (0x80004005): Type 'ASP._Page_Views_diagnostics_razor_cshtml' does not inherit from 'System.Web.UI.Page'.]
   System.Web.UI.Util.CheckAssignableType(Type baseType, Type type) +8864436
   System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +75
   System.Web.Routing.PageRouteHandler.GetHttpHandler(RequestContext requestContext) +138
   System.Web.Routing.UrlRoutingModule.PostResolveRequestCache(HttpContextBase context) +8911880
   System.Web.Routing.UrlRoutingModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +86
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

几乎直接访问(没有.cshtml)

http://localhost:9490/views/diagnostics/razor

在我向项目添加视图或控制器文件夹之前发生了这种情况。之前它是Pages/Diagnostics/razor routes.MapPageRoute(null, "razor", "~/Pages/Diagnostics/razor.cshtml");

配置的路线为routes.MapPageRoute(null, "razor", "~/Views/diagnostics/razor.cshtml");

工作正常。页面本身是单个变量访问之外的纯HTML,确认服务器端剃刀代码正在触发。

    @{
    Layout = null;
    Page.Title = "Razor test";
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
<p>Razor rendering success</p>
<p>
IsPost=@IsPost
</p>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

我可能会离开这里:)但是 - 为什么你在MVC应用程序中使用“MapPageRoute”,我相信它适用于Web表单应用程序。使用控制器,然后MapRoute到您的控制器,然后转到您的视图。视图文件夹中的任何内容都不能直接寻址,实际上你的web.config中有一个条目专门试图阻止这种情况。

答案 1 :(得分:0)

我建议使用WebPageRouteHandler,您可以通过NuGet系统获取。在回答Adam的评论时,您获得了更复杂的URL的能力路由,例如Backbone.js在访问RESTful服务器时使用的URL。为数据库中的每个可能的id创建一个单独的文件夹是荒谬的。您还可以以不同于网址结构的方式组织文件。