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

How do I import a namespace in Razor View Page?

提问人:Amitabh 提问时间:7/14/2010 最后编辑:Sinister BeardAmitabh 更新时间:11/9/2023 访问量:327497

问:

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

asp.net ASP.NET-MVC-3 Razor WebMatrix

评论

7赞 Surjit Samra 11/14/2011
您还可以将别名添加到导入的命名空间 stackoverflow.com/questions/4798293/mvc3-import-namespace/...

答:

897赞 Amitabh 7/14/2010 #1

终于找到了答案。

@using MyNamespace

对于 VB.Net:

@Imports Mynamespace

如果您想在整个应用程序中包含命名空间,请查看 @ravy amiry 的答案

评论

9赞 Dan Esparza 7/24/2011
另外:它们不能进入代码块。(你会得到一个运行时错误)
7赞 RPM1984 7/26/2011
此外,您不需要分号。
7赞 Tom Stickel 8/4/2015
这只是一个糟糕的练习期。请不要将其添加到剃须刀页面的顶部。这很乱,等等......正确的方法是添加到视图 - web.config,正如@Javad_Amiry指出的那样。
31赞 Triynko 9/5/2015
这不是坏习惯。这是一个绝对必要的功能。web.config 就像一个全局 using 语句,它使命名空间在所有页面中处于活动状态。如果在不同的命名空间中有同名的类,这可能不是你想要的。如果您尝试在同一文件中使用它们,您仍然会遇到冲突,但您可以在单个文件中轻松解决该问题。如果将其粘贴到 web.config 中,则使用任一类的所有页面都会发生冲突。因此,称这种不良做法是完全没有意义的。
6赞 Triynko 9/5/2015
我很惊讶 Intellisense 没有暗示像在普通 C# 页面中那样添加 using 语句。
27赞 Germán 7/28/2010 #2

在 ASP.NET MVC 3 预览版1 中,可以使用 Global.asax 中的此代码在所有 Razor 视图上导入命名空间.cs

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

我希望在RTM中通过Web.config部分完成此操作。

评论

7赞 Andrew Stanton-Nurse 7/31/2010
RTM 中将有一个 web.config 部分,但我们也希望提供一个 API 来执行此操作,因为许多用户开始远离 config。因此,我们为您提供了两种选择!
7赞 Germán 10/8/2010
从 ASP.NET MVC 3 Beta 开始,此方法不再有效。有一个新的 web.config 部分,如此处所述 stackoverflow.com/questions/3875207/...。用于将全局命名空间导入到所有视图的 AddGlobalImport 方法已移至此类 System.Web.WebPages.Razor.WebPagesRazorHost
3赞 Howard 1/16/2011 #3

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

16赞 k-dev 4/27/2011 #4

我发现这个 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之前执行

评论

5赞 jahu 7/2/2014
这实际上是一个相当不错的答案,但位置更改为 .Microsoft.WebPages.Compilation.AddGlobalImportSystem.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport
3赞 jahu 7/2/2014
使用此方法的最大优点在于,命名空间可以在所有视图(包括区域内的视图)中使用,而只需在一个地方声明即可。
413赞 amiry jd 7/17/2011 #5

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

在项目的“视图”目录中的“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/<AreaName>/Views/ 下添加命名空间,而不是 /Views/

评论

12赞 amiry jd 7/21/2011
@vtortola:哪个web.config?Views 文件夹中的 web.config 文件,而不是根文件夹中的主 web.config。还行?
12赞 Nick Silberstein 11/11/2011
我希望能为某人节省几分钟的时间,并说如果您在某个区域内工作,则必须在 Web.config 中的 /Areas/<AreaName>Views/ 而不是 /Views/ 下添加命名空间。
13赞 amiry jd 12/28/2012
@MatthijsWessels 不,它不需要重启 VS。只需构建项目,它就会生效。至少我总是这样做。如果视图处于打开状态,则必须在生成之前关闭该视图,并在生成后重新打开它。
3赞 Matthijs Wessels 12/28/2012
@Javad_Amiry,啊哈,我确实重建了,但没有关闭视野。
2赞 Tom Stickel 8/4/2015
是的,这是正确的方法。不是 Razor 页面顶部的 Using 语句,就像 OP 所选答案中那样。
14赞 user933765 9/8/2011 #6

您必须知道的一个问题是,当您通过 in folder 导入命名空间时,该命名空间针对该文件夹中的视图导入。意味着如果要导入区域视图,还必须导入该区域文件中位于区域文件夹中的 ,则该视图位于区域文件夹中;web.configViewsnamespacenamespacenamespaceweb.configViews

3赞 HiteshAjudiya 12/3/2015 #7

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

@using XX.YY.ZZ
34赞 Alper Şaldırak 1/19/2016 #8

对于图书馆

@using MyNamespace

对于型号

@model MyModel

评论

2赞 FrenkyB 11/8/2016
为什么没有;最后?
3赞 Mark 8/10/2017
@FrenkyB因为这不是 C# 代码,而是 Razor 代码。.cs 文件的开头是 C# 编译器关键字。.cshtml 文件开头的 是 Razor 模板引擎的提示。using@using
11赞 Abhishek Siddhu 7/2/2017 #9

你可以试试这个

@using MyNamespace
12赞 Mahaveer Jangid 8/11/2018 #10

对于命名空间和库

@using NameSpace_Name

对于型号

@model Application_Name.Models.Model_Name 

对于 Razor 页面上的循环访问列表(必须使用 foreach 循环来访问列表项)

@model List<Application_Name.Models.Model_Name>

@foreach (var item in Model)
   {  
          <tr>
                <td>@item.srno</td>
                <td>@item.name</td>
         </tr>  
   }
1赞 Imran Javed 8/6/2019 #11

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

0赞 Munirul Islam 11/9/2023 #12

在 C# 中,您可以通过以下方式执行此操作

@using Microsoft.AspNetCore.Http;