1

这是我上一个问题的延续(.CSHTML 页面不会呈现),但我不再收到 500 错误,因此是新帖子。我的页面现在只是呈现纯文本/html(不管我做什么)。

如果我尝试通过 WebMatrix3 查看它们,我可以使页面正常工作,但我无法从浏览器(本地主机或通过网络)查看它们。

我最近意识到我的页面是为 ASP.NET v2.0 设置的,我猜它不支持 .cshtml。因此,我将所有内容都更改为 v4.0,但我仍然无法正确查看页面。这只是纯文本。

我有:

  • 已安装 MVC 3
  • Win7 家庭高级版上的 IIS 7.5
  • 我要加载的页面的目录转换为应用程序
  • web.config 正常运行,虽然我不确定还有什么,如果我需要它的话
  • 我的服务器正常运行 HTML、.css、.php、python 等...但是我在任何 ASP.NET 功能(包括 .aspx)上都遇到了可怕的运气。

我真的不知道我需要在这里提供什么其他信息,但是如果您要,我会提供。

编辑 1
现在我在尝试查看的任何 .cshtml 页面上都出现 404 错误。这发生在我没有输入 MIME 类型之前,但是当我输入 MIME 类型时被纠正(至少是纯文本)。我不知道发生了什么......此时我几乎准备好了只需卸载所有内容并尝试重新开始。=\

编辑 2
好的,所以我已经摆脱了 404 和 500 错误。我最终将特权用户添加到应用程序池(高级设置 > 流程模型 > 身份)。它之前被设置为 defaultAppPool。现在我得到了这个:

Type 'ASP._Page_default2_cshtml' does not inherit from 'System.Web.WebPages.WebPage'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Type 'ASP._Page_default2_cshtml' does not inherit from 'System.Web.WebPages.WebPage'.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:


[HttpException (0x80004005): Type 'ASP._Page_default2_cshtml' does not inherit from 'System.Web.WebPages.WebPage'.]
   System.Web.UI.Util.CheckAssignableType(Type baseType, Type type) +9633480
   System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +66
   System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(String virtualPath, Type requiredBaseType) +28
   System.Web.WebPages.BuildManagerWrapper.CreateInstanceOfType(String virtualPath) +203
   System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance(IVirtualPathFactory factory, String virtualPath) +145
   System.Web.WebPages.VirtualPathFactoryManager.CreateInstanceOfType(String virtualPath) +153
   System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance(IVirtualPathFactory factory, String virtualPath) +73
   System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(String virtualPath, IVirtualPathFactory virtualPathFactory) +23
   System.Web.WebPages.WebPageRoute.DoPostResolveRequestCache(HttpContextBase context) +349
   System.Web.WebPages.WebPageHttpModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +89
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

还有什么想法吗?哦,创建一个新的应用程序并没有帮助,但这是个好主意。

4

2 回答 2

2

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

于 2014-04-15T07:42:18.400 回答
1

您可以尝试在操作中显式设置 ContentType:

public ActionResult NotFound() {
Response.ContentType = "text/html";
return View(); }
于 2020-10-29T13:51:19.037 回答