愛上MVC3系列~Razor頁面中(zhong)的共享namespace不起(qi)作(zuo)用了(解決自定(ding)義擴展方法(fa)不能識別的問題)
在MVC2時代,我們如果(guo)希望在頁面上引入一(yi)個namespace,可(ke)以這樣來實(shi)現(xian)
1 <%@ Import Namespace="Web.Helpers" %>
如果名稱空間是所有(you)頁面都需要的,像System.Web.Mvc這(zhe)種類型的,我們可(ke)以把它寫在web.config里,像這(zhe)樣
1 <pages> 2 <namespaces > 3 <add namespace="System.Web.Helpers" /> 4 <add namespace="System.Web.Mvc" /> 5 <add namespace="System.Web.Mvc.Ajax" /> 6 <add namespace="System.Web.Mvc.Html" /> 7 <add namespace="System.Web.Routing" /> 8 <add namespace="Web.Helpers"/> 9 </namespaces> 10 </pages>
但,到了MVC時代,如果你選擇的(de)(de)模板引(yin)擎是(shi)razor,那以上的(de)(de)web.config里的(de)(de)設置就是(shi)沒有用(yong)的(de)(de)了,因為(wei)(wei)razor做(zuo)為(wei)(wei)一種(zhong)第三方的(de)(de)組(zu)件為(wei)(wei).net引(yin)入,它是(shi)在views目(mu)錄下的(de)(de)web.config中
進行配(pei)置的(de),所以,你(ni)在根(gen)目錄(lu)的(de)web.config里(li)的(de)pages標簽(qian)下設(she)置namespace是不(bu)起(qi)作用(yong)的(de)。
我們需要打開Views/Web.config,我們可以代(dai)(dai)到下面代(dai)(dai)碼:
1 <configuration> 2 <configSections> 3 <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 4 <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 5 <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 6 </sectionGroup> 7 </configSections> 8 9 <system.web.webPages.razor> 10 <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 11 <pages pageBaseType="System.Web.Mvc.WebViewPage"> 12 <namespaces> 13 <add namespace="System.Web.Mvc" /> 14 <add namespace="System.Web.Mvc.Ajax" /> 15 <add namespace="System.Web.Mvc.Html" /> 16 <add namespace="System.Web.Routing" /> 17 <add namespace="Web.Commons.Helpers"/> 18 <add namespace="Web.Helpers"/> 19 20 </namespaces> 21 </pages> 22 </system.web.webPages.razor> 23 </configuration>
像其(qi)它第三方組件一(yi)樣,razor也是在配置(zhi)文件中進行聲明的,我(wo)們找到(dao)(dao)這個文件的namespaces節點,添加我(wo)們需要的namespace,重新VS后,你的命名(ming)空(kong)間下(xia)的內容就被共享(xiang)到(dao)(dao)View上了。