Mam niestandardowy mechanizm wyświetlania opracowany wewnętrznie. W tym samym projekcie chciałbym użyć Razor dla niektórych stron i mojego niestandardowego silnika dla niektórych stron. W jaki sposób platforma MVC wybiera silnik, którego ma używać? BTW, mój niestandardowy silnik nie wymaga żadnych szablonów, renderuje strony na podstawie metadanych z bazy danych. Dla mojego niestandardowego silnika nie chcę ustawiać żadnych plików szablonów. Spodziewam się, że powinien istnieć sposób na zmotoryzowanie danego silnika w oparciu o nazwę kontrolera i nazwę działania. Czy ta elastyczność istnieje w MVC3?W jaki sposób MVC3 wybiera, który ViewEngine ma użyć, jeśli mam wiele silników w kolekcji ViewEngines?
Odpowiedz
Twój aparat wyświetlania powinien implementować interfejs IViewEngine. Po zarejestrowaniu mechanizmu wyświetlania za pomocą metody ViewEngines.Engines.Add()
, struktura MVC zadzwoni pod numer FindView i FindPartialView, gdy będzie potrzebować mechanizmu wyświetlania do renderowania widoku.
Jest absolutnie możliwe, aby silniki z wieloma widokami działały obok siebie. Jeśli nie chcesz, aby twój mechanizm wyświetlania był używany w konkretnej sytuacji, musisz return new ViewEngineResult(new string[0]);
z FindView
lub FindPartialView
, a MVC wybierze inny mechanizm wyświetlania. Jeśli chcesz, aby twój mechanizm wyświetlania był używany, zwrócisz poprawną ViewEngineResult wskazującą na klasę widoku (która implementuje IView), która ma być wynikiem Render.
Istnieje kilka szczegółów z parametrem useCache
. Jeśli chcesz dowiedzieć się więcej, była świetna prezentacja na temat budowania własnego silnika widokowego w TechEd 2011 autorstwa Louisa DeJardina. Możesz znaleźć film o Writing an ASP.NET MVC View Engine na Channel9.
Myślę, że najłatwiej byłoby wdrożyć IViewPageActivator
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt11-view-page-activator.html i http://msdn.microsoft.com/en-us/library/system.web.mvc.iviewpageactivator(v=vs.98).aspx.
Myślę, że powracająca wartość null z metody Create
spowoduje, że później będzie domyślną wartością domyślną IViewPageActivator
. Wstrzykujesz go do DependencyResolver
, http://bradwilson.typepad.com/blog/2010/10/service-location-pt5-idependencyresolver.html.
Może być łatwiejszy w użyciu, jeśli korzystasz ze schematu wtrysku zależności jako NInject lub Unity.
Tak. Używam wtrysku zależności z Unity. Czy możesz wyjaśnić, w jaki sposób można go rozwiązać, wdrażając program IViewPageActivator. Jeśli dodasz niestandardową implementację do IViewPageActivator, to znowu ten sam problem, który wysłałem, również istnieje. Czy mogę mieć więcej niż jeden program IViewPageActivator? Jak skonfigurować do jednego lub drugiego? – Charasala
Nie wiem, czy można mieć więcej niż jeden program IViewPageActivator, ale nie powinno być trudne wdrożenie niestandardowego rozwiązania, które to rozwiązuje. Ponadto, myślę, że powrót do wartości zerowej spowoduje, że domyślnie się pojawi. –
- 1. Rails ma wiele odpowiedników w ASP.NET MVC3
- 2. w jaki sposób hdfs wybiera datanode do przechowywania
- 3. W jaki sposób kompilator wie, który blok catch ma wykonać?
- 4. W jaki sposób Hive wybiera liczbę reduktorów do pracy?
- 5. W jaki sposób GHCi wybiera nazwy zmiennych typu?
- 6. Czy istnieje sposób, aby przyspieszyć sposób, w jaki moja siatka reaguje, gdy mam wiele wierszy?
- 7. W jaki sposób system wybiera właściwą tabelę stron?
- 8. MVC3 Lista rozwijana nie wybiera wybranego elementu
- 9. W jaki sposób kompilacja wybiera funkcję szablonu do wywołania?
- 10. W jaki sposób można użyć std :: bind?
- 11. W jaki sposób mam tekst przeniknąć do UILabel?
- 12. W jaki sposób można uzyskać punkt przerwania, jeśli zmienna instancji w klasie ma zmienioną wartość?
- 13. W jaki sposób należy użyć tf.summary.tensor_summary?
- 14. W jaki sposób mam słabe struktury linków w Xcode 4?
- 15. W jaki sposób mam korzystać z pakietu haskell-type-exts?
- 16. W Mongo, w jaki sposób wyświetlić indeksy kolekcji?
- 17. W jaki sposób uzyskać aktualny schemat na DB2 jeśli mam conneciton JDBC?
- 18. Jeśli mam wskaźnik pustych przestrzeni, w jaki sposób wstawić do niego int?
- 19. Jaki jest preferowany sposób korzystania z kolekcji równoległych w Scali?
- 20. Czy można utworzyć niestandardowy znacznik szablonu, który zwraca zestaw zapytań? Jeśli tak, w jaki sposób? - Django
- 21. W Python unittest, w jaki sposób utworzyć i użyć "obiektu wywoływanego, który zwraca zestaw testów"?
- 22. jaki sposób można użyć metody rozszerzenie VB.NET w C# projektu
- 23. Czy można użyć zdarzenia click w chmurze tagów D3 i jeśli tak, to w jaki sposób?
- 24. Dlaczego mam niestabilną sesję w aplikacji MVC3 z serwerami godaddy
- 25. W jaki sposób obsłużyć wiele asserts w jednym unittest Python?
- 26. W jaki dokładnie sposób "Selektor wersji programu Visual Studio" wybiera wersję VS?
- 27. W jaki sposób Emacs wybiera, które mniejsze tryby mają być wyświetlane w linii trybu?
- 28. W jaki sposób Intellij wybiera konstruktora po kliknięciu opcji Znajdź użycie?
- 29. W jaki sposób można podzielić i potokować wiele strumieni NAudio
- 30. Jak zezwolić wiele wejść, gdy wiele przycisków wybiera
Dzięki Marco. "Jeśli nie chcesz, aby twój mechanizm wyświetlania był używany w konkretnej sytuacji, zwróć nowy ViewEngineResult (nowy ciąg [0]), z FindView lub FindPartialView i MVC wybierze inny mechanizm wyświetlania.". To rzeczywiście działało dobrze. Ale jest to niepotrzebna wycieczka do mojego niestandardowego silnika, kiedy dokładnie wiem, który silnik również w niektórych przypadkach jest wykorzystywany. Prawdopodobnie projektanci MVC nie myśleli o tej sytuacji. Dzięki jeszcze raz! – Charasala