ASP.Net MVC Mengalihkan Ke Tampilan Yang Berbeda

89

Apakah mungkin untuk mengalihkan ke tampilan yang berbeda dari pengontrol?

Misalnya, semua pengontrol saya mewarisi dari pengontrol kustom yang memiliki konstruktor yang ingin saya alihkan ke tampilan berbeda jika kriteria tertentu tidak terpenuhi. Harapan itu masuk akal.

Gavin
sumber

Jawaban:

147

Anda dapat menggunakan RedirectToAction()metode ini, maka tindakan yang Anda alihkan dapat mengembalikan Tampilan. Cara termudah untuk melakukannya adalah:

return RedirectToAction("Index", model);

Kemudian dalam metode Indeks Anda, kembalikan tampilan yang Anda inginkan.

John Sheehan
sumber
1
Jika saya melakukannya dengan cara ini bagaimana cara mengembalikan tampilan tertentu dari Action controller.
Gavin
18
return View ("ViewName");
Craig Stuntz
11
@Craig - Tampilan kembali tidak melakukan pengalihan dan URL akhirnya sama seperti sebelumnya. Jadi, jika Anda berada di "/ edit / MyItem" maka mengembalikan View ("showitem") akan memberi Anda tampilan "showitem" dengan url "/ edit /". Tergantung pada situasi Anda, ini bisa berhasil, tetapi tidak selalu.
jeffreypriebe
5
@ jeffrey, itu adalah dua langkah terpisah: Arahkan ulang tindakan pertama, seperti kata John, lalu kembalikan View di tindakan kedua. Tindakan pertama tidak bisa (secara langsung) memberi tahu yang kedua tampilan mana yang akan digunakan.
Craig Stuntz
@Craig yang sedikit membantu. Ada "tindakan" dan "pandangan" - dua hal yang terpisah. Lalu mengapa jawaban saya di bawah ini berfungsi: RedirectToAction - tidak ada perubahan tampilan. Saya yakin ini .net MVC 101 tetapi saya tidak mengerti. Terima kasih.
jeffreypriebe
20
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }
Mahender Reddy
sumber
2
Ini menggunakan Action controller yang sama. RedirectToAction memanggil tindakan yang berbeda. Ini adalah solusi termudah bagi saya.
RaoulRubin
6

Cara termudah adalah menggunakan return View.

return View("ViewName");

Ingat, nama fisik "ViewName" harus seperti ViewName.cshtml dalam proyek Anda, jika Anda menggunakan MVC C # / .NET.

Maeda
sumber
4

Saya tidak 100% yakin apa syaratnya untuk ini, tetapi bagi saya di atas tidak bekerja secara langsung, mengira sudah dekat. Saya pikir itu karena saya membutuhkan "id" untuk pandangan saya dengan model itu disebut "ObjectID".

Saya memiliki model dengan berbagai macam informasi. Saya hanya membutuhkan id.

Sebelum di atas saya membuat objek System.Web.Routing.RouteValueDictionary baru dan menambahkan id yang dibutuhkan.

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(Catatan: proyek MVC yang dimaksud tidak saya buat, jadi saya tidak tahu di mana semua bit "fiddly" yang tepat.)

jeffreypriebe.dll
sumber
3

Inilah yang dapat Anda lakukan:

return View("another view name", anotherviewmodel);
Andrew
sumber