Saya menggunakan _viewstart.cshtml untuk secara otomatis menetapkan Layout Razor yang sama dengan pandangan saya.
Ini adalah file sederhana yang mati di root folder Views saya yang terlihat seperti ini:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Ini lebih KERING daripada menambahkan arahan @Layout ke setiap tampilan tunggal.
Namun, ini menimbulkan masalah bagi sebagian tampilan Razor , karena mereka menjalankan konten _viewstart.cshtml dan karena itu salah menempatkan tata letak sendiri, yang membuat mereka, um, tidak lagi parsial.
Berikut adalah proyek hipotetis, menampilkan file _viewstart.cshtml, file _layout.shtml bersama, dan tampilan sebagian ("AnonBar.cshtml").
Saat ini, cara saya menyiasatinya adalah dengan menambahkan baris berikut ke setiap tampilan sebagian:
@{
Layout = "";
}
Ini sepertinya cara yang salah untuk menunjukkan pandangan sebagai bagian dari Razor. (Perhatikan bahwa tidak seperti mesin tampilan formulir web, ekstensi file sama untuk tampilan sebagian.)
Pilihan lain yang saya pertimbangkan tetapi itu bahkan lebih buruk:
- Menempatkan semua tampilan sebagian ke folder umum, sehingga mereka dapat membagikan _viewstart.cshtml umum. Ini mematahkan konvensi pandangan yang berada di folder yang sama dengan pengontrolnya.
- Tidak menggunakan tampilan sebagian.
Apakah ini sesuatu yang masih disempurnakan oleh tim mesin tampilan Razor, atau apakah saya kehilangan konsep mendasar?
sumber
Jawaban:
Jika Anda
return PartialView()
dari pengontrol Anda (bukanreturn View()
), maka_viewstart.cshtml
tidak akan dieksekusi.sumber
PartialViewResult
kelas. Itulah yang saya butuhkan.PartialViewResult
daripada yang biasaActionResult
.ActionResult
? Saya terkejut bahwa ini adalah masalah karena runtime MVC seharusnya tidak berperilaku berbeda dalam hal ini (yaitu selama jenis yang dikembalikan oleh metode tindakan adalahActionResult
atau setiap kelas yang diturunkan darinya hal-hal seharusnya hanya berfungsi).ActionResult
. Bekerja dengan baik jika tipe pengembaliannyaPartialViewResult
. Pikirkan saya perlu mengajukan bug Connect?