ASP.Net MVC Farklı Bir Görünüme Yönlendirme


89

Bir denetleyiciden farklı bir görünüme yönlendirmek mümkün mü?

Örneğin, tüm denetleyicilerim, belirli ölçütler karşılanmadığında farklı bir görünüme yeniden yönlendirmek istediğim bir kurucuya sahip özel bir denetleyiciden miras alıyor. Umarım mantıklıdır.

Yanıtlar:


147

RedirectToAction()Yöntemi kullanabilirsiniz , ardından yönlendirdiğiniz eylem bir Görünüm döndürebilir. Bunu yapmanın en kolay yolu şudur:

return RedirectToAction("Index", model);

Ardından İndeks yönteminizde, istediğiniz görünüme dönün.


1
Bu şekilde yaptıysam, bir denetleyici Eyleminden belirli bir görünümü nasıl döndürürüm.
Gavin

11
@Craig - dönüş Görünümü bir yönlendirme yapmaz ve URL öncekiyle aynı olur. Bu nedenle, "/ edit / MyItem" adresindeyseniz, View ("showitem") geri dönmek size "/ edit /" url'si ile "showitem" görünümünü verecektir. Durumunuza bağlı olarak bu işe yarayabilir, ancak her zaman değil.
jeffreypriebe

5
@jeffrey, bu iki ayrı adımdır: İlk eylemde yeniden yönlendir, John'un dediği gibi, ardından ikinci eylemde Görünümü döndür. İlk eylem, ikinciye hangi görünümü kullanacağını söyleyemez (zaten doğrudan).
Craig Stuntz

@Craig biraz yardımcı oluyor. Bir "eylem" ve bir "görünüm" vardır - iki ayrı şey. O zaman aşağıdaki cevabım neden işe yarıyor: RedirectToAction - Görünümde değişiklik yok. Bunun .net MVC 101 olduğuna eminim ama anlamıyorum. Teşekkürler.
jeffreypriebe

Tamlık açısından ASP.Net MVC, yeniden yönlendirmenin gerçekleşmesini sağlamak için bir HTTP Durum Kodu 302 yayınlar.
aboy021

20
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }

2
Bu, aynı denetleyici Eylemini kullanır. RedirectToAction farklı bir eylemi çağırır. Bu benim için en kolay çözümdü.
RaoulRubin

6

En basit yol, return View kullanmaktır.

return View("ViewName");

MVC C # / .NET kullanıyorsanız, "GörünümAdı" nın fiziksel adı projenizde ViewName.cshtml gibi bir şey olmalıdır.


4

Bunun için koşulların ne olduğundan% 100 emin değilim, ancak benim için yukarıdakiler doğrudan işe yaramadı, yaklaştığını düşündüm. Sanırım bunun nedeni benim görüşüm için "id" ye ihtiyaç duyduğum için modelde buna "ObjectID" deniyordu.

Çeşitli bilgiler içeren bir modelim vardı. Sadece kimliğe ihtiyacım vardı.

Yukarıdakilerden önce yeni bir System.Web.Routing.RouteValueDictionary nesnesi oluşturdum ve gerekli kimliği ekledim.

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

(Not: Söz konusu MVC projesini ben oluşturmadım, bu yüzden tüm doğru "karmaşık" bitlerin nerede olduğunu bilmiyorum.)


3

Yapabilecekleriniz şunlardır:

return View("another view name", anotherviewmodel);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.