如何将额外的命名空间添加到Razor页面而不是@using声明?
我需要使用一些神奇的方法来获取webconfig中pages/namespaces
元素的pages/namespaces
吗?
<pages> <namespaces> <add namespace="System.Web.Mvc"/> <add namespace="System.Web.Mvc.Ajax"/> <add namespace="System.Web.Mvc.Html"/> <add namespace="System.Web.Routing"/> <add namespace="System.Web.WebPages"/> <add namespace="System.Web.Helpers"/> <add namespace="MyCustomHelpers"/> </namespaces> </pages>
以上只是不想工作。 我知道命名空间是好的,因为当我把@using MyCustomHelpers
放在页面顶部的时候,它是神奇的。
这样我才能使Html.SomeFunction()
工作,而不必把@using
放在我所有页面的顶部
更新 :请看看我更新的答案,适用于MVC 3 RC: Razor HtmlHelper扩展(或其他命名空间的意见)未find
MVC 3 Preview 1和MVC 3 Beta(今天发布)之间已经发生了变化。 在预览1中,Razor使用了WebForms命名空间configuration部分。 但是,在Beta中有一个新的configuration部分与WebForms分开。 您需要将以下内容添加到web.config文件中(或者从模板中的全新项目开始):
<configSections> <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"> <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" /> <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" /> </sectionGroup> </configSections> <system.web.webPages.razor> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="MyCustomHelpers" /> </namespaces> </pages> </system.web.webPages.razor>
请注意 ,您可能需要closures并重新打开文件,才能使编辑器find所做的更改。
请注意,web.config中还需要其他更改才能使Razor在MVC3 Beta中工作,因此最好~\View\Web.config
Beta项目模板中提供的~\View\Web.config
文件。
如果您将命名空间声明放在Web.config
根目录“Views”文件夹和/或当前区域的“Views”文件夹(取决于您的视图的位置)中,它应该按预期工作。
我发现这个http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx ,它解释了如何添加一个自定义名称空间到所有的razor页面。
基本上你可以做到这一点
using Microsoft.WebPages.Compilation; public class PreApplicationStart { public static void InitializeApplication() { CodeGeneratorSettings.AddGlobalImport("Custom.Namespace"); } }
并将下面的代码放在AssemblyInfo.cs中
[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]
InitializeApplication方法将在Global.asax中的Application_Start之前执行
对于什么是值得的,另一种技术是简单地把你的助手扩展类放在默认包含在视图引擎中的System命名空间中。 例如:
namespace System.Web.Mvc { public static class HtmlHelper_MyExtensions { ... } }
这样,只要包含该类的库被引用,所有东西都会看到它。 由于您正在扩展System.Web.Mvc
类,所以将扩展方法放在相同的名称空间中似乎是合理的。
在确认对视图根目录中的web.config进行了更改后,尝试closures并重新打开视图。
closures并重新打开解决了我的问题。
看这里:
ASP.NET MVC 4命名空间问题在剃刀视图