How do I import a namespace in Razor View Page?
如何在Razor视图页中导入命名空间?
- 您还可以将别名添加到导入的命名空间stackoverflow.com/questions/4798293/mvc3 import namespace/…
终于找到了答案。
对于VB.NET:
如果您想在整个应用程序中包含一个名称空间,请看一下@javad_Amiry的答案。
- 另外:它们不能进入代码块。(您将得到一个运行时错误)
- 你也不需要分号。
- 嗨,如本文所述,如何在MVC中使用全球化?
- 这只是一个不好的练习阶段。请不要将此添加到剃须刀页面的顶部。这真是一团糟…正确的方法是添加到视图-web.config,正如@javad_Amiry指出的那样。
- 这不是坏做法。这是一个绝对必要的特性。web.config就像一个全局using语句,使名称空间在所有页面中都处于活动状态。如果在不同的命名空间中具有相同名称的类,这可能不是您想要的。如果您试图在同一个文件中使用它们,仍然会有冲突,但是您可以在单个文件中轻松地解决冲突。如果您将它坚持在web.config中,那么冲突将出现在使用任何一个类的所有页面中。所以说这种不好的做法毫无意义。
- 我很惊讶IntelliSense没有像在普通的C_页中那样提示添加using语句。
- @Triynko这可能不是一个糟糕的实践,基于您提供的有效示例,但是如果没有这些冲突,这肯定不是最佳实践。
- 如果它缩小到根本不使用imports-mynamespace,并且在必要时只在视图中使用它,会怎么样?例如,如果myNamespace.objClass…没有导入,而不是if objclass…使用imports.mynamespace。
第一种方法是在.cshtml文件中使用@using语句,只将命名空间导入当前文件,第二种方法是:
在项目的"Views目录"中的"web.config"文件中(注意它不是项目根目录中的主web.config),找到以下部分:
1 2 3 4 5 6 7 8 9 10 11
| <system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
.
.
<!-- etc -->
</namespaces>
</pages>
</system.web.webPages.razor> |
可以这样添加自定义命名空间:
这将向所有.cshtml(和/或.vbhtml)文件添加命名空间;此外,您还可以从此处更改视图继承,例如:
1
| <pages pageBaseType="My.Custom.MyWebViewPage"> |
当做。
更新:多亏了@EDOCX1[3]给他关于区域的提醒!他说:
如果你在一个区域内工作,你必须在/Areas//Views/下的Web.config内添加namespace,而不是/Views/
- 我的web.config中没有该节,我应该添加它吗?
- @vtortola:哪个web.config?视图文件夹中的web.config文件,而不是根文件夹中的主web.config。好啊?
- 我希望能为某人节省几分钟的时间来拔出他们的头发,并说如果你在一个区域内工作,你必须在web.config中的/areas/views/而不是/views/下添加名称空间。
- 注意:在VS2010工作之前,我必须重新启动它。
- @Matthijswesels不,它不需要重启,只需要构建项目,它就会生效。至少我总是这么做。如果视图已打开,则必须在生成前关闭该视图,并在生成后重新打开它。
- @贾瓦德·阿米里,啊哈,我确实重建了,但没有关闭视野。
- @贾瓦德·阿米里让我发疯了,谢谢你!
- 使用导入的web.config方法可以防止使用过多的实现细节污染视图,例如要使用的类的实现。这假设两个实现共享相同的名称,但具有不同的名称空间。通过使用web.config转换和blah.blah.test名称空间,可以在仅测试的实现中实现。
- 是的,这是正确的方法。不是在Razor页面顶部的using语句,就像在op selected answer中那样……
- 不管微软打算做什么,我都认为通过配置文件进行编码是一个糟糕的实践——配置应该用于系统"我在哪里找到东西",或者简单的参数更改。我很惊讶的是,xxx.models和xxx.controllers——等等不只是工作,因为MVC是基于这种神奇的配置。
为图书馆
为模型
- 为什么没有;在最后?
- @因为这不是C代码,而是Razor代码。.cs文件开头的using是C compiler关键字。.cshtml文件开头的@using是对Razor模板引擎的提示。
在ASP.NET MVC 3 Preview1中,可以使用global.asax.cs中的此代码在所有Razor视图上导入命名空间。
1
| Microsoft.WebPages.Compilation.CodeGeneratorSettings.AddGlobalImport("Namespace.Namespace"); |
我希望在RTM中,这可以通过web.config部分完成。
- 在rtm中有一个web.config部分,但是我们也希望提供一个API来完成这项工作,因为许多用户开始从config中脱离出来。所以我们为您提供了两种选择!
- 从ASP.NET MVC 3 Beta开始,此方法不再有效。有一个新的web.config部分,如这里所述stackoverflow.com/questions/3875207/&hellip;。用于将全局命名空间导入所有视图的AddGlobalImport方法已移动到此类System.Web.WebPages.Razor.WebPagesRazorHost。
我找到了这个http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx,它解释了如何向所有Razor页面添加自定义命名空间。
基本上你可以做到
1 2 3 4 5 6 7 8
| using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
public static void InitializeApplication()
{
CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
}
} |
并将以下代码放入assemblyinfo.cs
1
| [assembly: PreApplicationStartMethod(typeof(PreApplicationStart),"InitializeApplication")] |
方法initializeapplication将在global.asax中的应用程序启动之前执行。
- 这实际上是一个相当好的答案,但Microsoft.WebPages.Compilation.AddGlobalImport的位置改为System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport。
- 使用此方法的最大优势在于,命名空间将在所有视图(包括区域内的视图)中都可用,而只在一个位置声明。
- 这对我不起作用!
您必须知道的一个问题是,当您通过Views文件夹中的Web.config导入命名空间时,namespace仅为该文件夹中的视图导入。表示如果要在区域视图中导入namespace,还必须在该区域的Web.config文件中导入该namespace,该文件位于该区域的Views文件夹中;
你可以试试这个
用于命名空间和库
为模型
1
| @model Application_Name.Models.Model_Name |
要在Razor页面上迭代列表(必须使用foreach循环访问列表项)
1 2 3 4 5 6 7 8 9
| @model List<Application_Name.Models.Model_Name>
@foreach (var item in Model)
{
<tr>
<td>@item.srno</td>
<td>@item.name</td>
</tr>
} |
"使用mynamespace"在MVC3 RTM中有效。希望这有帮助。
我认为为了在Razor视图中导入名称空间,只需要通过以下方式添加: