CSHTML只渲染文本 - 静态页面?

时间:2013-08-13 14:50:53

标签: asp.net asp.net-mvc-3 razor

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

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

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

我有:

  • MVC 3已安装
  • Win7 Home Premium上的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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以尝试在操作中明确设置ContentType:

public ActionResult NotFound() {
Response.ContentType = "text/html";
return View(); }