2

Web フォーム プロジェクトを作成すると、コード ビハインドが DLL にコンパイルされ、IIS サーバーによって処理されます。Javascript を使用すると、ブラウザーによって解釈され、Chrome 開発者ツールなどを使用するか、ソースを調べることで見つけることができます。

しかし、Razor 構文を使用して ASP.NET Web ページを作成すると、どこにもコードが見つかりません。コンパイルする必要がないため、DLL に入れられず、Chrome の検査ツールを使用してその痕跡を見つけることができません。

では、Razor コードはどこに行くのでしょうか?

4

2 に答える 2

8

それらは実際に実行時にコンパイルされます。生成されたコード ファイルと一時 DLL は、コンパイルされた Web フォームが配置されている場所と同じ場所にあります。

C:\Windows\Microsoft.NET\Framework64\<version>\Temporary ASP.NET Files\<app>\

ビューのエラーを検出するために、プロジェクトの残りの部分と一緒にコンパイルを有効にすることもできます。参照: Razor ビューをコンパイルできますか? . これにより、(私の経験では) ソリューションのコンパイル時間が長くなりますが、実行時まで気付かれないエラーを検出するには最適です。必要に応じてスイッチを入れます。

Razor パーサー/ジェネレーター コードは、System.Web.Razor プロジェクト/アセンブリ (MVC ソースの一部として入手可能) に含まれています。最終結果は ac# クラスであるため、c# コンパイラはおそらく、他のクラスと同様にそこから処理します。

ビュー用に生成されたコードは次のようになります (私のプロジェクトの 1 つの「パスワードのリセット」ページから抜粋)。

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<Web.UI.Areas.Anonymous.ResetPasswordViewModel> {

#line hidden

        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("</h1>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div");

EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 302, 63, true);

BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 365, 12, true);

WriteLiteral(" class=\"two\"");

EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 365, 12, true);

BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 377, 15, true);

WriteLiteral(">\r\n        <div");

EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 377, 15, true);

BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 392, 19, true);

WriteLiteral(" class=\"banner-box\"");

EndContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 392, 19, true);

BeginContext("~/Areas/Anonymous/Views/Home/ResetPassword.cshtml", 411, 5, true);

WriteLiteral(">\r\n\r\n");

            #line default
            #line hidden

             using( @Html.BeginForm( "ResetPassword", "Home", FormMethod.Post, new { id = "main-form" } ) )
            {

                Write(Html.ValidationSummary());

// etc. etc. Even simple views result in a large code file
于 2013-09-28T01:56:44.730 に答える