Dalam proyek ASP.NET MVC 3 default, tata letak & file cshtml parsial mulai dengan garis bawah
_viewstart
_Layout
_LogOnPartial
Mengapa konvensi ini, dan untuk apa ini digunakan? Apakah saya perlu mengikuti konvensi ini?
Apakah kerangka kerja memberikan makna khusus pada .cshtml
file yang dimulai dengan garis bawah?
asp.net
asp.net-mvc-3
razor
richb
sumber
sumber
Jawaban:
Razor dikembangkan untuk ASP.NET Web Pages (WebMatrix), yang tidak memiliki perlindungan yang sama terkait folder Views dan Routing yang Anda dapatkan dalam MVC. Karena halaman tata letak di Halaman Web tidak dimaksudkan untuk dilayani secara langsung, mereka diawali dengan garis bawah. Dan kerangka Halaman Web telah dikonfigurasi untuk tidak mengizinkan file dengan garis bawah terkemuka di namanya diminta secara langsung. File .cshtml lainnya dalam Halaman Web umumnya harus dapat dijelajahi. Itu setara dengan file .asp atau .php.
Tim ASP.NET telah menyatakan bahwa Halaman Web adalah titik awal dalam pengembangan ASP.NET, yang akan mengarah pada migrasi ke MVC pada waktunya (bagi mereka yang ingin melanjutkan). Sebagian dari itu berarti semudah mungkin untuk bermigrasi dari Halaman Web ke MVC. Akibatnya, masuk akal untuk membawa konvensi penamaan yang ditetapkan dalam Halaman Web ke file MVC Razor.
Jadi ada adalah alasan teknis untuk awalan nama file dengan tanda garis bawah - itu hanya tidak relevan dengan MVC.
[UPDATE Oktober 2018]
Dalam kerangka ASP.NET Core Razor Pages yang baru (selain dalam versi 2.1), file dengan garis bawah terkemuka diabaikan ketika rute dibuat saat startup - bahkan jika mereka memiliki
@page
arahan (yang biasanya menjadikannya Halaman Razor yang dapat dilewati) . Itu sebabnya masuk akal untuk memberi nama tata letak dan sebagian file dengan garis bawah terkemuka dalam aplikasi Halaman Razor jika tidak dimaksudkan untuk diramban.sumber
Begitulah Ruby on Rails melakukannya (Partial memulai dengan _ tetapi panggilan Render Partial tidak termasuk _), dan ASP.net MVC telah mengambil inspirasi besar darinya.
Tidak ada alasan teknis sebenarnya, hanya sebuah konvensi untuk secara jelas menunjukkan maksud kepada pengembang lain (dan diri Anda sendiri 6 bulan kemudian) untuk mengatakan: Ini adalah pandangan sebagian.
sumber
System.Web.HttpNotFoundHandler
untuk mereka).Halaman yang tidak dapat ditampilkan oleh permintaan langsung dari browser Anda (halaman master, sebagian tampilan dll) memiliki garis bawah (_) di awal nama mereka.
Jadi jika Anda mencoba membuat permintaan ke _Layout.cshtml (ini adalah halaman master) Anda akan mendapatkan kesalahan dari server.
Ini adalah cara untuk membedakan file yang tidak dapat diakses sebagai halaman yang berdiri sendiri, di Razor view engine.
Pikirkan seperti ini ... di MVC 2 ... Anda akan membedakan tampilan parsial dan master dengan sufix .master, .ascx, dan halaman normal adalah .aspx, di sisi lain, dalam tampilan Razor ... semua tampilan adalah .cshtml, jadi untuk membedakan sebagian dan halaman utama mereka akan memiliki awalan (_). tidak ada yang wajib, hanya "konvensi".
sumber
Sejauh yang saya tahu ini hanyalah sebuah konvensi yang digunakan untuk mengidentifikasi maksud file; Saya tidak percaya itu benar-benar akan mengubah perilaku file. Dalam sebagian besar konteks pengembangan, menambahkan garis bawah mengidentifikasi sesuatu yang dimaksudkan untuk penggunaan "pribadi", baik oleh kelas, atau dalam hal ini, templat lain.
sumber
Saya tidak menggunakan MVC, tetapi dengan halaman web yang juga menggunakan sintaks silet, awalan _ umumnya menandakan bahwa halaman tersebut tidak dimaksudkan untuk diakses oleh pengguna tetapi oleh halaman lain atau kode tertentu. Jika Anda mencoba menavigasi ke halaman yang berisi _prefix, asp.net akan mencegah akses ke sana. Itulah mengapa ini digunakan dengan halaman tata letak dan halaman semacam itu karena tidak boleh diakses langsung oleh pengguna.
Sesuatu seperti folder App_Code di asp.net
sumber
/view
di bawah dalam proyek ASP.NET MVC default; yang/views/web.config
file dibentuk untuk mencegahnya. Tapi tidak ada yang mencegah tindakan pengontrol untuk kembali.View("_Index", model);
Ini berfungsi dengan baik; Saya hanya melakukannya dengan mengubah nama tampilan menjadi _Index.cshtml dan mengubah tindakan untuk memanggil seperti yang saya lakukan di atas.