2009-07-31 3 views
33

Tüm denetleyicilerin mirasını alacağım SuperController var. Kurucuda ViewData ControllerName ve ActionName kullanarak doldurmaya çalışıyorum.ControllerName ve ActionName'i edinin ve Master Sayfasında ViewData'yı doldurun mu?

ControllerName ve ActionName'i ViewData olarak geçmeyeceğim. ControllerName ve ActionName gerektiren bir yöntemim var ve yöntemin dönüş değerini ViewData olarak geçirmem gerekiyor.

Bunu nasıl yapabilirim?

+0

, kontrolör isimleri istek url muhafazasını yansıtacaktır bu http://stackoverflow.com/a/31749391/4293929 – MstfAsan

cevap

3

Doğru yazınızı okuyorum ve görünümde denetleyici/eylem adlarını erişmeye çalışan değiliz ama YERİNE varsayarsak Onlarla bir şey yapmaya çalışıp sonucu görüntülemeye çalışın:

İçerik henüz oluşturulmadığından yapıcıda yapamazsınız. Sen başlatma yöntemini geçersiz kılmak gerekir: (. Eğer işlevine sadece ControllerContext.RouteData içinde geçebileceği unutmayın ve buna ihtiyacı değerleri seçelim)

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     //here the routedata is available 
     ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"]; 
    } 

Bunlara hiç almak için gereken

1

görünümlerinden çok, ve ben biraz farklı bir açıdan vurmak - Ben geçerli ControllerName ve ActionName vermek için HtmlHelper için birkaç uzantısı yöntemleri yazdı. ViewData [] torbasına dalmak ya da uygun yerlere bir şeyler enjekte etmekten endişelenmenize gerek kalmayacak şekilde ele alınması biraz daha kolaydır.

+0

Bu uzantı yöntemlerinin, HtmlHelper yerine, UrlHelper için daha uygun olacağını düşünürdüm. Bu iki değer gerçekten HTML ile ilgisi yok. –

+0

İyi bir nokta - Bence uygulamanın bu şekilde yeniden düzenlenmiş olabileceğini düşünüyorum. Teori her iki durumda da kabaca aynıdır - içeri itmek yerine dışarı çekin. –

6

bu deneyin: eylemi almak için

RouteData.Values.First().Value.ToString() 
+0

Eğer özel yönlendirme kullanıyorsanız (ör. 'Dil/denetleyici/eylem') 'denetleyici 'ilk giriş olmayabilir. –

+0

bu http://stackoverflow.com/a/31749391/4293929 adresine bir göz atın – MstfAsan