2013-03-28 14 views
6

Potrzebuję pobrać nazwę pojedynczego widoku wewnątrz folderu views\something (pochodzi z żądania) w ramach MVC 4.0 i nie jestem pewien, jak najlepiej to zrobić.Pobierz plik wewnątrz folderu widoków w ASP.Net MVC 4.0

Mój kod działa, ale ma "hacky" i mam nadzieję, że ktoś może zostać uproszczony.

Mój kod wygląda następująco:

private FileInfo GetNameOfViewToServe() 
    { 
     var LeftPartOfUri = Request.Url.GetLeftPart(UriPartial.Authority); 
     var folder = Request.Url.AbsoluteUri.Replace(LeftPartOfFolderUri,string.Empty); 
     var directory = new DirectoryInfo(Server.MapPath(@"~\Views\" + folder)); 
     return directory.GetFiles().First(); 
    }  

Czy jest bardziej eleganckim sposobem osiągnięcia tego celu?

+0

jakiegoś powodu nie należy przechowywać go w bazie danych i mieć nazwę, aby ją indentify? EG: http: \\ mysite.com \ submitreview -> db lookup dla submitreview = ~ \ Views \ submitreview.aspx – Justin

+0

Tak, niestety, to projekt w brązowym polu i muszę pracować z tym, co tam jest. Potrzebuję tylko bardziej eleganckiego sposobu pobierania listy plików (zwykle tylko jeden ze ścieżki żądania względnego: – davy

+0

czy możesz pokazać działanie kontrolera, które wywołujesz? Ponieważ jest to MVC, czy twój kontroler nie może wykonać ogólnej akcji, która parametr string i możesz użyć odbicia, aby utworzyć widok lub wzór przypominający fabrykę, który zwróci widok oparty na kluczu łańcucha? – Justin

Odpowiedz

4

Spróbuj tego rozwiązania z pytaniem ASP.NET-MVC . How to get the controller name from an url? LUB Get ControllerName and ActionName and populate the ViewData in Master Page?

var controller = (string)RouteData.Values["controller"]; 
+0

dzięki, zobacz komentarz powyżej.) Używany kontroler jest ogólny i zawsze zwraca 'PageController', co nie jest zbyt pomocne – davy

+0

@ Davy Zgadzam się z Justinem, powinieneś popatrzeć na refleksję. – webdeveloper

Powiązane problemy