Inilah About.cshtml dari templat MVC 3 default:
@{
ViewBag.Title = "About Us";
}
<h2>About</h2>
<p>
Put content here.
</p>
Saya berharap bahwa referensi ke file _ViewStart akan ditemukan di About.cshtml
, tetapi jelas tidak.
Saya sudah melihat ke dalam global.asax
danweb.config
, tetapi saya tidak dapat menemukan bagaimana About.cshtml
file "ditautkan" dengan tata letak dari file _ViewStart.
Semuanya berfungsi seperti yang diharapkan, saya hanya ingin tahu apa yang terjadi di bawah tenda ...
ViewLocationFormats = ViewLocationFormats.Union(new string[] { "~/Inspinia/ExampleViews/{1}/{0}.cshtml" }).ToArray();
. Akibatnya, saya harus menambahkan salinan file _ViewStart.cshtml saya ke "~ / Inspinia / ExampleViews", jika tidak diambil dan tata letak tidak ditetapkan._ViewStart
di setiap subfolder yang akan ditautkan ke tampilan dalam subfolder itu?Dalam pengertian yang lebih umum, kemampuan kerangka kerja MVC ini untuk "mengetahui" tentang _Viewstart.cshtml disebut "Pengodean dengan konvensi".
Wikipedia
Tidak ada keajaiban untuk itu. Ini baru saja ditulis ke dalam basis kode inti kerangka MVC dan karena itu sesuatu yang MVC "tahu" tentang. Itu sebabnya Anda tidak menemukannya di file .config atau di tempat lain; sebenarnya dalam kode MVC. Namun Anda dapat mengganti atau membatalkan konvensi ini.
sumber
Hanya pemikiran lain.
Jika Anda ingin memiliki milik Anda sendiri
cshtml
file sebagai templat umum, Anda dapat melakukannya dengan cara iniDi dalam Anda,
_viewstart.cshtml
Anda dapat menyebutkancshtml
file umum Anda .sumber
Kode sumber adalah tempat yang jauh lebih baik untuk mencari ini daripada dokumentasi.
Referensi MVC 6 kode dari Github, kami memiliki beberapa file yang menarik
----memperbarui----
Karena perubahan struktur sumber, informasi tentang bagaimana halaman startstart dikumpulkan sekarang dapat ditemukan di RazorViewEngine.cs mencari fungsi "GetViewStartPages".
----/memperbarui----
Untuk menjawab bagaimana mereka berperan, lihat RazorView , yang saya percaya (karena IView) terkait dengan pipa MVC. File ini memiliki metode RenderAsync yang dipanggil dari pipa MVC untuk membuat tampilan yang diminta.
RenderAsync melakukan panggilan ke RenderPage DAN KEMUDIAN RenderLayout (CATATAN PESANAN). RenderPage pertama-tama melakukan panggilan untuk menangani file viewstart (perhatikan jamak, mungkin ada lebih dari satu file viewview).
Jadi, informasi yang Anda cari dapat diperoleh dari fungsi RenderViewStartAsync di file RazorView.cs di bawah Microsoft.AspNet.Mvc.Razor namespace.
sumber
Ini dapat menambahkan beberapa info tambahan ke pertanyaan ini sekarang (2016 ala MVC4, MVC5).
Mesin Razor menemukan dan menjalankan kode dalam _ViewStart.cshtml sebelum kode lain yang berada di direktori atau subdirektori yang sama di mana _ViewStart.cshtml ditemukan.
Tampilan apa pun dapat mengesampingkan properti Layout atau nilainya.
Hanya berpikir saya mungkin menambahkan sedikit lebih banyak info untuk menunjukkan kepada Anda mengapa _ViewStart.
Jika Anda mendapatkan ILSpy dan memeriksa kode di RazorViewEngine (System.Web.Mvc.dll), Anda akan melihat bahwa kode itu sendiri merujuk nama itu.
Anda dapat melihat bahwa RazorViewEngine mencari file dengan nama itu:
sumber
Jika Anda ingin memiliki tata letak umum untuk halaman Anda, Anda perlu menentukan tata letak umum dan untuk mengaitkan tampilan dengan tata letak kita harus mengatur properti tata letak pada setiap tampilan, ini melanggar prinsip KERING (Jangan Ulangi Sendiri). Untuk .Net Framework ini telah menyediakan file "_ViewStart.cshtml", ditempatkan di dalam folder tampilan. Kami menempatkan informasi tata letak dalam file "_ViewStart.cshtml" dan setiap tampilan secara default menggunakan informasi tata letak ini. Jika Anda ingin memberikan beberapa informasi tata letak yang berbeda, anggaplah untuk tampilan Beranda Anda, Anda dapat membuat "_ViewStart.cshtml" baru dengan referensi tata letak itu dan meletakkannya di folder "Tampilan Rumah".
sumber
Jawaban singkatnya adalah : ViewStart mulai lebih dulu ketika tampilan apa pun ditampilkan. Ceritanya di bawah ini:
Kisah pembuatan file tampilan tunggal:
Berharap ini membuat Anda menyadari apa yang sebenarnya terjadi di dalam misteri yang tidak diketahui dari siklus hidup program Anda.
sumber