How to import a namespace in Razor View Page?
Finally found the answer.
@using MyNamespace
For VB.Net:
@Imports Mynamespace
Take a look at @ravy amiry's answer if you want to include a namespace across the app.
The first way is that use @using
statement in .cshtml
files, that imports a namespace to current file only, and the second:
In the "web.config" file in "Views
" directory of your project (notice it is not the main web.config in project's root), find this section:
<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>
you can add your custom namespace like this:
<add namespace="My.Custom" />
that will add the namespace to all of .cshtml (and/or .vbhtml) files; also you can change views inheritance from here, like:
<pages pageBaseType="My.Custom.MyWebViewPage">
Regards.
UPDATE: Thanks to @Nick Silberstein
to his reminder about areas! He said:
If you're working within an area, you must add the namespace
within the Web.config
under /Areas/<AreaName>/Views/
rather than /Views/
For Library
@using MyNamespace
For Model
@model MyModel
using
at the beginning of a .cs file is a C# compiler keyword. The @using
at the beginning of a .cshtml file is a hint to the Razor template engine.
In ASP.NET MVC 3 Preview1 you can import a namespace on all your razor views with this code in Global.asax.cs
Microsoft.WebPages.Compilation.CodeGeneratorSettings.AddGlobalImport("Namespace.Namespace");
I hope in RTM this gets done through Web.config section.
I found this http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx which explains how to add a custom namespace to all your razor pages.
Basically you can make this
using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
public static void InitializeApplication()
{
CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
}
}
and put the following code in your AssemblyInfo.cs
[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]
the method InitializeApplication will be executed before Application_Start in global.asax
Microsoft.WebPages.Compilation.AddGlobalImport
was changed to System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport
.
One issue that you must know is that when you import a namespace via web.config
in Views
folder, that namespace
is imported JUST for views in that folder. Means if you want to import a namespace
in an area views, you must also import that namespace
, in that area's web.config
file, located in area's Views
folder;
For namespace and Library
@using NameSpace_Name
For Model
@model Application_Name.Models.Model_Name
For Iterate the list on Razor Page (You Have to use foreach loop for access the list items)
@model List<Application_Name.Models.Model_Name>
@foreach (var item in Model)
{
<tr>
<td>@item.srno</td>
<td>@item.name</td>
</tr>
}
You can try this
@using MyNamespace
"using MyNamespace" works in MVC3 RTM. Hope this helps.
I think in order import namespace in razor view, you just need to add below way:
@using XX.YY.ZZ
Depending on your need you can use one of following method:
In first line/s of view add "using your.domainName;" (if it is required in specific view only)
if required in all subsequent views then add "using your.domainName;" in _ViewStart.cshtml. You can find more about this in: Where and how is the _ViewStart.cshtml layout file linked?
Or add Assembly reference in View web.config as described by others explained in: How do you implement a @using across all Views in Asp.Net MVC 3?
Success story sharing