razor helps you embed serverside code like C# code into web pages. cshtml is just a file extension. razor view engine is used to convert razor pages(. cshtml) to html.
The purpose of the _ViewImports. cshtml file is to provide a mechanism to centralise directives that apply to Razor pages so that you don't have to add them to pages individually. The default Razor Pages template includes a _ViewImports. cshtml file in the Pages folder - the root folder for Razor pages.
So, the _layout. cshtml would be a layout view of all the views included in Views and its subfolders. Setting Layout View in _ViewStart.cshtml. The _ViewStart. cshtml can also be created in the sub-folders of the View folder to set the default layout page for all the views included in that particular subfolder.
What is a CSHTML file? A file with . cshtml extension is a C# HTML file that is used at server side by Razor Markup engine to render the webpage files to user's browser.
Razor was developed for ASP.NET Web Pages (WebMatrix), which doesn't have the same sort of protection built in regarding Views folders and Routing that you get within MVC. Since layout pages in Web Pages are not intended to be served directly, they are prefixed with the underscore. And the Web Pages framework has been configured not to allow files with leading underscores in their names from being requested directly. Other .cshtml files within Web Pages generally need to be browsable. They are the equivalent of .asp or .php files.
The ASP.NET team have stated that Web Pages is a starting point within ASP.NET development, which should lead to migration to MVC in time (for those that want to move on). Part of that means that it should be as easy as possible to migrate from Web Pages to MVC. Consequently, it makes sense to carry over naming conventions established within Web Pages to MVC Razor files.
So there is a technical reason for prefixing the file names with an underscore - it just isn't relevant to MVC.
[UPDATE Oct 2018]
In the new ASP.NET Core Razor Pages framework (apart from in version 2.1), files with a leading underscore are ignored when routes are being generated at startup - even if they have an @page
directive (which would normally make them a routeable Razor Page). That's why it makes sense to name layout and partial files with a leading underscore in a Razor Pages application if they are not intended to be browsed.
That's how Ruby on Rails does it (Partials start with a _ but the Render Partial call does not include the _), and ASP.net MVC has drawn heavy inspiration from it.
No technical reason really, just a convention to clearly show the intent to other developers (and yourself 6 months later) to say: This is a partial view.
Pages that cannot be shown by direct requests from your browser (master pages, partial views etc) have underscore (_) in the beginning of their names.
So if you try to make the request to _Layout.cshtml (this is master page) you will get an error from server.
Its a way of distinguishing the files that can`t be browsed as stand alone pages, in Razor view engine.
Think of it this way... in MVC 2 ... you would differentiate the partial view and the mastersite with the sufix .master, .ascx, and normal pages are .aspx, on the other hand, in Razor view... all views are .cshtml, so to distinguish partial and masterpages they will have a prefix (_). its nothing mandatory, just a "convention".
As far as I know this is simply a convention used to identify the intent of the file; I don't believe it will actually change the behavior of the file. In most development contexts, prepending an underscore identifies something to be meant for "private" use, whether by a class, or in this case, another template.
I dont use MVC, but with web pages which also uses the razor syntax, the _ prefix generally siginifies that the page is not meant to be accesssed by a user but by other pages or some code. If you try to navigate to a page that contains the _prefix, asp.net would prevent access to it. Thats why its used with layout pages and other such pages since they should not be accessed directly by a user.
Something like the App_Code folder in asp.net
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With