Widoki w Ilaro.Admin
Ilaro.Admin oprócz logiki oczywiście też posiada widoki, a żeby je przechować to trzeba je skompilować. Niestety ASP MVC nie ma takiej możliwości out of the box, więc wspomogłem się świetnym narzędziem RazorGenerator.
W skrócie, żeby go użyć wystarczy zainstalować paczkę nuget i ustawić dla widoku, który ma być skompilowany Custom Tool na RazorGenerator.
Mając już skompilowany widok musimy go jeszcze użyć. Ilaro.Admin rejestrujemy view engine, który potrafi korzystać z takich widoków.
W przypadku gdy natrafia w tej samej lokalizacji i na skompilowany i normalny widok, priorytet ma ten normalny.
Co oznacza, że jeśli w swoim projekcie dodamy area o nazwie IlaroAdmin i dodamy widok o takiej samej nazwie co już się znajduje w Ilaro, będzie on użyty zamiast oryginalnego widoku.
Dzięki temu można na przykład zmienić layout panelu administracyjnego tak by odpowiadał on bardziej naszym potrzebą.
Editor templates
Każdy typ danych ma przypisany swój domyślny template, który określa w jaki sposób będzie on edytowany (osobny template jest do wyświetlania). Domyślnie oczywiście stringi otrzymują pole tekstowe, liczby kontrolke spinnera, enumy selecta itd.
Dla niektórych typów danych istnieje kilka gotowych już templatów, np. dla stringa można wybrać prosty edytor html.
1 |
Entity<Product>.Register().Template(editor: Templates.Editor.Html); |
Jako parametr przekazujemy stringa, który jest nazwą templata. Templates.Editor.Html to zwykły util dla istniejących templatów.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public static class Templates { public static class Editor { public const string Text = "TextBoxPartial"; public const string Date = "DatePartial"; public const string Html = "HtmlPartial"; ... } public static class Display { public const string Text = "TextPartial"; public const string Date = "DatePartial"; public const string Html = "HtmlPartial"; ... } } |
Możemy także przekazać nazwę widoku istniejącego tylko w naszym projekcie.
Nadpisywanie widoków
Żeby nadpisać widok, trzeba stworzyć area o nazwie IlaroAdmin, następnie tworzymy widok o takiej samej nazwie i w tym samy katalogu.
Żeby widok działał poprawnie trzeba też dodać pare przestrzeni nazw w web configu w area IlaroAdmin.
1 2 3 4 5 |
<add namespace="Ilaro.Admin" /> <add namespace="Ilaro.Admin.Extensions" /> <add namespace="Ilaro.Admin.Core" /> <add namespace="Ilaro.Admin.Models" /> <add namespace="Ilaro.Admin.Models.Paging" /> |
Ostatnią rzeczą, o której trzeba pamiętać, to nadpisujący widok musi przyjmować taki sam model jak oryginalny.
PS
Pisząc ten post zauważyłem, że można rozszerzyć trochę view engine tak by korzystał z widoków zlokalizowanych w różnych assemblies. Dzięki temu w osobnym projekcie będzie można stworzyć nowy layout dla Ilaro.Admin i współdzielić go między projektami.
PS 2
Druga rzecz, która mi przyszła do głowy to, ze można zautomatyzować tworzenie klasy Templates używając T4 templates.
Dodaj komentarz