デフォルトのASP.NET MVC 3プロジェクトでは、レイアウトと一部のcshtmlファイルはアンダースコアで始まります
_viewstart
_Layout
_LogOnPartial
なぜこの規則、そしてこれは何のために使われるのですか?この規則に従う必要がありますか?
フレームワーク.cshtml
は、アンダースコアで始まるファイルに特別な意味を与えますか?
デフォルトのASP.NET MVC 3プロジェクトでは、レイアウトと一部のcshtmlファイルはアンダースコアで始まります
_viewstart
_Layout
_LogOnPartial
なぜこの規則、そしてこれは何のために使われるのですか?この規則に従う必要がありますか?
フレームワーク.cshtml
は、アンダースコアで始まるファイルに特別な意味を与えますか?
回答:
RazorはASP.NET Webページ(WebMatrix)用に開発されました。これには、MVC内で取得するビューフォルダーとルーティングに関して、同じ種類の保護が組み込まれていません。Webページのレイアウトページは直接提供されることを意図していないため、アンダースコアが前に付けられます。また、Webページフレームワークは、名前に先頭にアンダースコアが付いているファイルが直接要求されないように構成されています。Webページ内の他の.cshtmlファイルは、通常、参照可能である必要があります。これらは、.aspファイルまたは.phpファイルに相当します。
ASP.NETチームは、WebページはASP.NET開発の出発点であり、(先に進みたい人のために)MVCへの移行につながるはずであると述べています。その一部は、WebページからMVCへの移行が可能な限り簡単であることを意味します。したがって、Webページ内で確立された命名規則をMVC Razorファイルに引き継ぐことは理にかなっています。
だから、そこにあるアンダースコアを使用してファイル名を前に置くための技術的な理由は-それだけでMVCには関係ありません。
[2018年10月更新]
新しいASP.NET Core Razorページフレームワーク(バージョン2.1を除く)では、起動時にルートが生成されると、@page
ディレクティブがある場合でも(通常はルーティング可能なRazorページになります)、ルートが生成されると無視されます。 。そのため、Razor Pagesアプリケーションでレイアウトや部分ファイルを先頭にアンダースコアを付けて参照することを意図していない場合は、それらに名前を付けるのが理にかなっています。
それがRuby on Railsのやり方です(Partialsは_で始まりますが、Render Partial呼び出しには_が含まれていません)。ASP.netMVCはそこから大きなインスピレーションを得ています。
実際には技術的な理由はありません。他の開発者(および6か月後の自分)に意図を明確に示すための慣例にすぎません。これは部分的なビューです。
System.Web.HttpNotFoundHandler
それらのために設定されています)、Viewsフォルダーのweb.configを参照してください。
ブラウザからの直接のリクエストでは表示できないページ(マスターページ、部分ビューなど)の名前の先頭にはアンダースコア(_)が付いています。
したがって、_Layout.cshtml(これはマスターページです)にリクエストを送信しようとすると、サーバーからエラーが発生します。
Razorビューエンジンで、スタンドアロンページとして参照できないファイルを区別する方法。
このように考えてみてください... MVC 2では...部分ビューとマスターサイトを区別し、接尾辞.master、.ascx、通常のページは.aspxですが、Razorビューでは...すべてのビューは.cshtmlであるため、部分ページとマスターページを区別するために、プレフィックス(_)が付きます。必須ではなく、単なる「慣例」です。
私はMVCを使用していませんが、かみそりの構文を使用するWebページでは、_プレフィックスは一般に、ページがユーザーによってアクセスされるのではなく、他のページまたはコードによってアクセスされることを意図していないことを簡略化します。_prefixを含むページに移動しようとすると、asp.netはそのページへのアクセスを妨げます。ユーザーが直接アクセスしてはならないレイアウトページやその他のページで使用されるのはこのためです。
asp.netのApp_Codeフォルダーのようなもの
/view
デフォルトのASP.NET MVCプロジェクトでは、/views/web.config
ファイルは、それを防ぐために設定されています。ただし、コントローラーアクションが返されないようにするものは何もありませんView("_Index", model);
。上記のように、ビューの名前を_Index.cshtmlに変更し、呼び出すアクションを変更するだけでそれを実行しました。