Apakah mungkin untuk menentukan apakah nama tampilan tertentu ada dari dalam pengontrol sebelum merender tampilan?
Saya memiliki persyaratan untuk secara dinamis menentukan nama tampilan yang akan dirender. Jika tampilan ada dengan nama itu maka saya perlu membuat tampilan itu. Jika tidak ada tampilan dengan nama kustom, saya perlu membuat tampilan default.
Saya ingin melakukan sesuatu yang mirip dengan kode berikut dalam pengontrol saya:
public ActionResult Index()
{
var name = SomeMethodToGetViewName();
// The 'ViewExists' method is what I've been unable to find.
if (ViewExists(name))
{
retun View(name);
}
else
{
return View();
}
}
asp.net-mvc
Andrew Hanson
sumber
sumber
Jawaban:
Bagi mereka yang mencari metode ekstensi salin / tempel:
sumber
Bagaimana jika mencoba sesuatu seperti berikut dengan asumsi Anda hanya menggunakan satu mesin tampilan:
sumber
Berikut cara lain [tidak selalu direkomendasikan] untuk melakukannya
sumber
ControllerContext
sebagaiFindView
metode kebutuhan.Jika Anda ingin menggunakannya kembali di beberapa tindakan pengontrol, berdasarkan solusi yang diberikan oleh Dave, Anda dapat menentukan hasil tampilan kustom sebagai berikut:
Kemudian dalam tindakan Anda, cukup kembalikan contoh tampilan kustom Anda:
sumber
2 sen saya.
sumber
Di asp.net core 2.x
ViewEngines
properti sudah tidak ada lagi sehingga kami harus menggunakanICompositeViewEngine
layanan tersebut. Ini varian dari jawaban yang diterima menggunakan injeksi ketergantungan:Bagi yang penasaran: Antarmuka dasar
IViewEngine
tidak terdaftar sebagai layanan jadi kita harus menyuntikkanICompositeViewEngine
sebagai gantinya. TheFindView()
Metode namun disediakan olehIViewEngine
sehingga variabel anggota dapat menggunakan antarmuka dasar.sumber
Berikut cara melakukannya di Razor untuk Core 2.2 dll. Perhatikan bahwa panggilannya adalah "GetView", bukan "Find View)
sumber