2011-05-09 29 views
7

Tôi đã phân phối mã MVC của mình vào một vài khu vực khác nhau và nhận thấy một điều. nếu tôi có cái gì đó trong Web.config chính, một cái gì đó như:có hỗ trợ mvc kế thừa cài đặt Web.config trong toàn bộ khu vực không?

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

những trang không thuộc vào vùng rễ không biết gì về điều đó. Và tôi phải lặp lại điều tương tự trong Web.config bên trong, cái nằm trong thư mục khu vực.

Bằng cách nào?

Trả lời

9

web.config kế thừa nhưng chỉ cho các thư mục con. ~/Areas là một thư mục riêng biệt từ ~/Views vì vậy những gì bạn đặt trong ~/Areas/SomeAreaName/Views/web.config không có điểm gì chung với những gì bạn đặt trong ~/Views/web.config. Và bởi vì Razor bỏ qua phần không gian tên trong ~/web.config, bạn cần phải lặp lại nó cho các khu vực.

Nói tóm lại bạn có:

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

đó là các thư mục và các bộ phận trong đó hai hoàn toàn khác biệt không thể được thừa hưởng.

+2

tốt, tôi nghĩ rằng nó bất ngờ và bất tiện – Agzam

+1

@Agzam, tôi hoàn toàn đồng ý với bạn nhưng một khi bạn hiểu cách thức hoạt động kế thừa web.config trong ASP.NET (sử dụng thư mục con) và nơi Razor tìm kiếm không gian tên, bạn sẽ thấy rằng nó có ý nghĩa . –

+3

Có liên kết đến tài liệu liên quan đến điều này không? – Mikhail

3

Tôi tạo ra một chức năng để làm điều này mà sẽ sử dụng web.config khu vực nếu người dùng đang sử dụng khu vực khác sẽ sử dụng web.config gốc:

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; 
     } 

Và sau đó gọi:

ForestSettings forestSettings = ConfigFunctions.GetWebConfigSection<ForestSettings>(controller, "myCompanyConfiguration/forestSettings"); 
Các vấn đề liên quan