Razor代码应该放在哪里?
问题的出现原因是:无论是使用Razor、传统的代码后台(独立文件)还是带有内联HTML和C#的.aspx,大体上都发生了相同的事情。所有的代码都会被转换为服务器端代码,并在服务器端执行,运行时生成HTML(以及您在源页面中看不到的注入的javascript)。源页面中的HTML成为服务器端代码在生成要发送给客户端的页面时使用的文本块。
服务器通常会编译您的页面,并运行编译后的代码;看起来像是“解释”的实际上在第一次页面加载时是即时编译的,并且为了后续的页面加载而在内存中缓存。
如果您在网站上找不到页面的任何编译输出的证据,那可能是因为该页面是即时编译的,实际上从未写入dll。
实际上,dll是JIT编译过程的结果。没有任何内容被缓存在内存中。
解决方法是:查找页面的编译输出,或者确认页面是通过即时编译生成的。
Razor代码是在运行时编译的,生成的代码文件和临时DLL文件存放在和编译的Web表单相同的位置。可以通过启用编译来检测视图中的错误,这将增加解决方案的编译时间,但有助于检测运行时可能忽略的错误。
Razor解析器/生成器代码包含在System.Web.Razor项目/程序集中。由于最终结果是一个C#类,所以C#编译器会处理它,就像处理任何其他类一样。
生成的视图代码类似于以下示例中的“重置密码”页面的代码。这个例子展示了一个较大的代码文件。
根据以上内容,我们可以得出结论:Razor代码被编译为C#类,编译后的文件存放在临时文件夹中,并且可以通过启用编译来检测错误。
解决方法:
1. 通过启用编译来检测视图中的错误,增加了解决方案的编译时间,但有助于检测运行时可能忽略的错误。
2. 可以找到生成的代码文件和临时DLL文件,它们存放在与编译的Web表单相同的位置。
代码示例:
namespace ASP { using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Web; using System.Web.Helpers; using System.Web.Security; using System.Web.UI; using System.Web.WebPages; using System.Web.Mvc; using System.Web.Mvc.Ajax; using System.Web.Mvc.Html; using System.Web.Routing; public class _Page_Areas_Anonymous_Views_Home_ResetPassword_cshtml : System.Web.Mvc.WebViewPage{ public _Page_Areas_Anonymous_Views_Home_ResetPassword_cshtml() { } protected ASP.global_asax ApplicationInstance { get { return ((ASP.global_asax)(Context.ApplicationInstance)); } } public override void Execute() { const string title = "Reset Password"; ViewBag.Title = title; BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 302, 63, true); WriteLiteral("\r\n
\r\n