2011-05-09 10 views
7

Rozprowadzałem mój kod MVC w kilku różnych obszarach i zauważyłem jedną rzecz. jeśli mam coś w głównym Web.config coś takiego:czy Dziedziczenie ustawień Web.config w obszarach jest obsługiwane przez mvc?

<system.web.webPages.razor> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <add namespace="System.Collections.Generic" /> 

te strony, które nie należą do strefy korzeniowej nic nie wiedzą o tym. I muszę powtórzyć to samo w wewnętrznym pliku Web.config, tym, który znajduje się w folderze obszaru.

Jak to możliwe?

Odpowiedz

9

web.config dziedziczy, ale tylko do podfolderów. ~/Areas to osobny folder od ~/Views, więc to, co wstawiasz do ~/Areas/SomeAreaName/Views/web.config, nie ma nic wspólnego z tym, co wstawiłeś w ~/Views/web.config. A ponieważ Brzytwa ignoruje sekcję nazw w numerze ~/web.config, trzeba ją powtórzyć dla obszarów.

Podsumowując masz:

  • ~/Views/web.config
  • ~/Areas/SomeAreaName/Views/web.config

które są dwa zupełnie różne foldery i sekcje w nich nie może być dziedziczona.

+2

Cóż, myślę, że to nieoczekiwane i niewygodne. – Agzam

+1

@Agzam, absolutnie się z tobą zgadzam, ale kiedy zrozumiesz, jak działa dziedziczenie web.config w ASP.NET (używając podfolderów) i gdzie Razor szuka przestrzeni nazw, zobaczysz, że ma to sens . –

+3

Czy istnieje link do dokumentacji dotyczącej tego? – Mikhail

3

Stworzyłem tę funkcję, która będzie korzystać z web.config okolicy, jeśli użytkownik korzysta z obszaru inaczej użyje web.config root:

public static T GetWebConfigSection<T>(Controller controller, string sectionName) where T : class 
     { 
      T returnValue = null; 
      String area = null; 

      var routeArea = controller.RouteData.DataTokens["area"]; 

      if(routeArea != null) 
       area = routeArea.ToString(); 

      System.Configuration.Configuration configFile = null; 

      if (area == null) 
      { 
       // User is not in an area so must be at the root of the site so open web.config 
       configFile = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/"); 
      } 
      else 
      { 
       // User is in an Area, so open the web.config file in the Area/views folder (e.g. root level for the area) 
       configFile = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Areas/" + area + "/Views"); 
      } 

      if (configFile != null) 
       returnValue = configFile.GetSection(sectionName) as T; 

      return returnValue; 
     } 

a następnie zadzwonić:

ForestSettings forestSettings = ConfigFunctions.GetWebConfigSection<ForestSettings>(controller, "myCompanyConfiguration/forestSettings"); 
Powiązane problemy