如何在 Razor 视图页面中导入命名空间?

Posted

技术标签:

【中文标题】如何在 Razor 视图页面中导入命名空间?【英文标题】:How do I import a namespace in Razor View Page? 【发布时间】:2011-03-15 10:02:18 【问题描述】:

【问题讨论】:

你也可以为你导入的命名空间添加别名***.com/questions/4798293/mvc3-import-namespace/… 【参考方案1】:

终于找到答案了。

@using MyNamespace

对于 VB.Net:

@Imports Mynamespace

如果您想在应用中包含命名空间,请查看 @ravy amiry's answer。

【讨论】:

另外:它们不能进入代码块。 (你会得到一个运行时错误) 另外你不需要分号。 这只是糟糕的练习期。请不要将此添加到剃须刀页面的顶部。这很混乱等等......正确的方法是添加到 Views - web.config 正如@Javad_Amiry 指出的那样。 这不是坏习惯。这是一个绝对必要的功能。 web.config 就像一个全局 using 语句,它使命名空间在您的所有页面中都处于活动状态。如果您在不同的命名空间中有同名的类,那可能不是您想要的。如果您尝试在同一个文件中使用它们,您仍然会遇到冲突,但您可以在单个文件中轻松解决。如果你把它放在 web.config 中,那么所有使用这两个类的页面都会出现冲突。所以称这种不良做法毫无意义。 我很惊讶 Intellisense 没有像在普通 C# 页面中那样提示添加 using 语句。【参考方案2】:

第一种方法是在.cshtml 文件中使用@using 语句,仅将命名空间导入当前文件,第二种:

在您项目的“Views”目录中的“web.config”文件中(注意它不是项目根目录中的主 web.config),找到这个部分:

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      .
      .
      <!-- etc -->
    </namespaces>
  </pages>
</system.web.webPages.razor>

您可以像这样添加自定义命名空间:

<add namespace="My.Custom" />

这会将命名空间添加到所有 .cshtml(和/或 .vbhtml)文件; 您也可以从这里更改视图继承,例如:

<pages pageBaseType="My.Custom.MyWebViewPage">

问候。


更新:感谢@Nick Silberstein 对区域的提醒!他说:

如果您在一个区域内工作,您必须在Web.config 内的/Areas/&lt;AreaName&gt;/Views/ 下添加namespace,而不是 /Views/

【讨论】:

@vtortola:哪个 web.config? Views 文件夹中的 web.config 文件,而不是根文件夹中的主 web.config。好吗? 我希望为某人节省几分钟拉头发的时间,并说如果您在某个区域内工作,则必须在 /Areas/ 下的 Web.config 中添加命名空间Views/ 而不是 /Views/。 @MatthijsWessels 不,它不需要重新启动 VS。只需构建项目,它就会生效。至少我总是这样做。如果视图已打开,则必须在构建之前关闭该视图并在构建后重新打开它。 @Javad_Amiry,啊哈,我确实重建了,但没有关闭视图。 是的,这是正确的方法。不是像 OP 选择的答案中那样 Razor 页面顶部的 Using 语句......【参考方案3】:

对于图书馆

@using MyNamespace

对于模型

@model MyModel

【讨论】:

为什么没有;最后? @FrenkyB 因为这不是 C# 代码,而是 Razor 代码。 .cs 文件开头的 using 是 C# 编译器关键字。 .cshtml 文件开头的 @using 是对 Razor 模板引擎的提示。【参考方案4】:

在 ASP.NET MVC 3 Preview1 中,您可以使用 Global.asax.cs 中的代码在所有剃刀视图上导入命名空间

Microsoft.WebPages.Compilation.CodeGeneratorSettings.AddGlobalImport("Namespace.Namespace");

我希望在 RTM 中这可以通过 Web.config 部分完成。

【讨论】:

RTM 中将有一个 web.config 部分,但我们也希望提供一个 API 来执行此操作,因为许多用户开始远离配置。因此,我们为您提供了两种选择! 从 ASP.NET MVC 3 Beta 开始,此方法不再有效。如***.com/questions/3875207/… 所述,有一个新的 web.config 部分。将全局命名空间导入所有视图的 AddGlobalImport 方法已移至此类 System.Web.WebPages.Razor.WebPagesRazorHost【参考方案5】:

我找到了这个http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx,它解释了如何向所有剃须刀页面添加自定义命名空间。

基本上你可以做到这一点

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 之前执行

【讨论】:

这其实是一个比较好的答案,只是Microsoft.WebPages.Compilation.AddGlobalImport的位置改成了System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport 使用这种方法的最大优势在于命名空间将在所有视图(包括区域内的视图)中可用,同时仅在一个地方声明。【参考方案6】:

您必须知道的一个问题是,当您通过web.configViews 文件夹中导入命名空间时,namespace 被导入 用于该文件夹中的视图强>。意味着如果您想在区域视图中导入namespace,您还必须将该namespace 导入该区域的web.config 文件中,该文件位于区域的Views 文件夹中;

【讨论】:

【参考方案7】:

对于命名空间和库

@using NameSpace_Name

对于模型

@model Application_Name.Models.Model_Name 

For 迭代 Razor 页面上的列表(您必须使用 foreach 循环来访问列表项)

@model List<Application_Name.Models.Model_Name>

@foreach (var item in Model)
     
          <tr>
                <td>@item.srno</td>
                <td>@item.name</td>
         </tr>  
   

【讨论】:

【参考方案8】:

你可以试试这个

@using MyNamespace

【讨论】:

【参考方案9】:

“使用 MyNamespace”在 MVC3 RTM 中有效。希望这会有所帮助。

【讨论】:

【参考方案10】:

我认为为了在 razor 视图中导入命名空间,您只需要添加以下方式:

@using XX.YY.ZZ

【讨论】:

【参考方案11】:

根据您的需要,您可以使用以下方法之一:

在视图的第一行添加“using your.domainName;” (如果是 仅在特定视图中需要)

如果在所有后续视图中都需要 然后添加“使用 your.domainName;”在 _ViewStart.cshtml 中。你可以找到 更多信息请参见:Where and how is the _ViewStart.cshtml layout file linked?

或在 View web.config 中添加程序集引用,如其他人在以下说明中所述:How do you implement a @using across all Views in Asp.Net MVC 3?

【讨论】:

以上是关于如何在 Razor 视图页面中导入命名空间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 terraform 中导入生成的 Kubernetes 集群的命名空间

如何在 Python 中导入 COM 对象命名空间/枚举?

覆盖在命名空间中导入的函数

在 R 的命名空间中导入有啥好处?

在 PHP 中导入类和命名空间:前导反斜杠有啥区别?

如何避免javascript命名空间冲突?