【问题标题】:ASP._page_views_diagnostics_<page>_cshtml does not inherit from System.web.ui.pageASP._page_views_diagnostics_<page>_cshtml 不继承自 System.web.ui.page
【发布时间】:2011-08-09 18:24:20
【问题描述】:

我有一个 asp.net 应用程序正在混合或慢慢迁移到 mvc,但是当通过路由 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/razorroutes.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>

【问题讨论】:

  • 你有没有想过如何做到这一点?我的意思是摆脱这个错误?

标签: asp.net asp.net-mvc


【解决方案1】:

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

【讨论】:

  • 这是一个 asp.net 网络应用程序,而不是一个 MVC 应用程序。 MapPageRoute 用于没有控制器的剃须刀页面。这适用于没有控制器的直接路径(非路由路径)。在这个项目中根本没有实现控制器。
  • hmmm.. 为什么在 MVC 中只使用“V”?你有什么收获?
  • 我不打算只使用 V,我的计划是把这个应用程序移过来,但我可以采取一些非侵入性的小步骤来验证它们是否可以和谐相处,以及新的编码如果我能解决问题,V 或完整的 MVC 可能会发生。
  • 例如,您正在 AngularJS 或类似框架之上构建单页应用程序 (SPA)。那么除了 Web API 之外,您不需要 ASP.NET MVC 视图/控制器。您可能仍希望将特定 URL 映射到物理 .cshtml 文件。但不幸的是 .MapPageRoute() 仅适用于 .aspx 页面:(
  • 在这种情况下,你得到了什么?使用带有适用脚本的简单 html 页面,否则您将绕过几件事来简单地获取一个 cshtml 文件,按照惯例,您无论如何都不应该直接寻址。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多