Saya memiliki tata letak berikut untuk proyek mvc saya:
- / Pengendali
- / Demo
- / Demo / DemoArea1Controller
- / Demo / DemoArea2Controller
- dll ...
- / Tampilan
- / Demo
- /Demo/DemoArea1/Index.aspx
- /Demo/DemoArea2/Index.aspx
Namun, ketika saya memiliki ini untuk DemoArea1Controller
:
public class DemoArea1Controller : Controller
{
public ActionResult Index()
{
return View();
}
}
Saya mendapatkan kesalahan "Tampilan 'indeks' atau masternya tidak dapat ditemukan", dengan lokasi pencarian biasa.
Bagaimana cara menentukan pengontrol itu dalam pencarian namespace "Demo" di subfolder tampilan "Demo"?
asp.net-mvc
views
Daniel Schaffer
sumber
sumber
Jawaban:
Anda dapat dengan mudah memperluas WebFormViewEngine untuk menentukan semua lokasi yang ingin Anda lihat:
Pastikan Anda ingat untuk mendaftarkan mesin tampilan dengan mengubah metode Application_Start di Global.asax.cs Anda
sumber
Sekarang di MVC 6 Anda dapat mengimplementasikan
IViewLocationExpander
antarmuka tanpa mengotak-atik mesin tampilan:dimana
{0}
nama tampilan target,{1}
- nama pengontrol dan{2}
- nama area.Anda dapat mengembalikan daftar lokasi Anda sendiri, menggabungkannya dengan default
viewLocations
(.Union(viewLocations)
) atau hanya mengubahnya (viewLocations.Select(path => "/AnotherPath" + path)
).Untuk mendaftarkan expander lokasi tampilan kustom Anda di MVC, tambahkan baris berikutnya ke
ConfigureServices
metode dalamStartup.cs
file:sumber
Sebenarnya ada metode yang jauh lebih mudah daripada melakukan hardcode jalur ke konstruktor Anda. Di bawah ini adalah contoh memperluas mesin Razor untuk menambahkan jalur baru. Satu hal yang saya tidak sepenuhnya yakin adalah apakah jalur yang Anda tambahkan di sini akan disimpan dalam cache:
Dan Global.asax.cs Anda
Satu hal yang perlu diperhatikan: lokasi khusus Anda akan membutuhkan file ViewStart.cshtml di akarnya.
sumber
Jika Anda hanya ingin menambahkan jalur baru, Anda dapat menambahkan ke mesin tampilan default dan menyisihkan beberapa baris kode:
Hal yang sama berlaku untuk
WebFormEngine
sumber
Daripada membuat subclass RazorViewEngine, atau menggantinya secara langsung, Anda bisa mengubah properti PartialViewLocationFormats RazorViewEngine yang ada. Kode ini masuk di Application_Start:
sumber
Terakhir saya periksa, ini mengharuskan Anda untuk membangun ViewEngine Anda sendiri. Saya tidak tahu apakah mereka membuatnya lebih mudah di RC1.
Pendekatan dasar yang saya gunakan sebelum RC pertama adalah, di ViewEngine saya sendiri, untuk membagi namespace pengontrol dan mencari folder yang cocok dengan bagian-bagiannya.
EDIT:
Kembali dan menemukan kodenya. Inilah gambaran umumnya.
sumber
Coba sesuatu seperti ini:
sumber
Catatan: untuk ASP.NET MVC 2 mereka memiliki jalur lokasi tambahan yang perlu Anda atur untuk tampilan di 'Area'.
Membuat mesin tampilan untuk Area dijelaskan di blog Phil .
Catatan: Ini untuk pratinjau rilis 1 jadi dapat berubah.
sumber
Sebagian besar jawaban di sini, hapus lokasi yang ada dengan menelepon
ViewEngines.Engines.Clear()
dan kemudian menambahkannya kembali ... tidak perlu melakukan ini.Kami cukup menambahkan lokasi baru ke yang sudah ada, seperti yang ditunjukkan di bawah ini:
Sekarang Anda dapat mengkonfigurasi proyek Anda untuk menggunakan yang di atas
RazorViewEngine
di Global.asax:Lihat tutoral ini untuk info lebih lanjut.
sumber