Bagaimana saya dapat memiliki tampilan membuat sebagian (kontrol pengguna) dari folder yang berbeda? Dengan pratinjau 3, saya biasa memanggil RenderUserControl dengan jalur lengkap, tetapi dengan memutakhirkan ke pratinjau 5 ini tidak mungkin lagi. Alih-alih, kami mendapatkan metode RenderPartial, tetapi itu tidak menawarkan fungsionalitas yang saya cari.
c#
asp.net-mvc
renderpartial
Boris Callens
sumber
sumber
FindPartialView
metodenya dengan sesuatu sepertiif(partialViewName.Contains"/")partialViewName="~/Views/"+partialViewName;
Dalam kasus saya, saya menggunakan MvcMailer (https://github.com/smsohan/MvcMailer) dan ingin mengakses sebagian tampilan dari folder lain, yang tidak ada di "Dibagikan." Solusi di atas tidak berfungsi, tetapi menggunakan jalur relatif tidak.
sumber
Jika Anda menggunakan jalur lain ini banyak waktu, Anda dapat memperbaikinya secara permanen tanpa harus menentukan jalur sepanjang waktu. Secara default, ini memeriksa tampilan sebagian di folder Lihat dan di folder Bersama. Tetapi katakan Anda ingin menambahkan satu.
Tambahkan kelas ke folder Model Anda:
Kemudian di file Global.asax.cs Anda, tambahkan baris berikut:
sumber
Untuk kontrol pengguna bernama myPartial.ascx yang terletak di folder Views / Account, tulis seperti ini:
sumber
Saya telah membuat solusi yang tampaknya bekerja cukup baik. Saya menemukan kebutuhan untuk beralih ke konteks pengontrol yang berbeda untuk pencarian nama tindakan, melihat pencarian, dll. Untuk menerapkan ini, saya membuat metode ekstensi baru untuk
HtmlHelper
:ControllerContextRegion
didefinisikan sebagai:Cara ini digunakan dalam tampilan adalah sebagai berikut:
Mungkin ada efek samping yang tidak diinginkan untuk ini jika kode Anda mengharuskan
controller
komponen rute untuk tidak berubah, tetapi dalam kode kami sejauh ini, tampaknya tidak ada negatif untuk pendekatan ini.sumber
VirtualPathProviderViewEngine, yang menjadi dasar WebFormsViewEngine, seharusnya mendukung karakter "~" dan "/" di depan jalan sehingga contoh Anda di atas harus bekerja.
Saya perhatikan contoh Anda menggunakan jalur "~ / Akun / myPartial.ascx", tetapi Anda menyebutkan bahwa kontrol pengguna Anda ada di folder Views / Akun. Sudahkah Anda mencoba
atau itu hanya kesalahan ketik dalam pertanyaan Anda?
sumber
Untuk pembaca yang menggunakan ASP.NET Core 2.1 atau yang lebih baru dan ingin menggunakan sintaks Pembantu Tag Sebagian , coba ini:
Tilde (~) adalah opsional.
Informasi di https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.1#partial-tag-helper juga membantu.
sumber
Anda harus mencoba ini
tempatkan
~/Views/
sebelum kode Andasumber
Buat Custom View Engine dan memiliki metode yang mengembalikan ViewEngineResult Dalam contoh ini Anda hanya menimpa
_options.ViewLocationFormats
dan menambahkan direktori folder Anda:Contoh: https://github.com/AspNetMonsters/pugzor
sumber
Coba gunakan
RenderAction("myPartial","Account");
sumber