789

How to import a namespace in Razor View Page?

1

12 Answers 12

902

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.

Sign up to request clarification or add additional context in comments.

9 Comments

Also: They can't go in code blocks. (You'll get a runtime error)
Also you don't need the semicolon.
This is just bad practice period. Please do not add this to the top of your razor pages. This is messy etc... Correct way is to add to Views - web.config just as @Javad_Amiry points out.
It's not bad practice. It's an absolutely necessary feature. web.config is like a global using statement that makes the namespace active in ALL your pages. That may not be what you want if you have classes with the same name in different namespaces. You'll still have a conflict if you try to use them in the same file, but you can resolve that easily within a single file. If you stick it in web.config, then the conflict would arise in all your pages that use either of the classes. So calling this bad practice makes no sense at all.
I'm surprised Intellisense doesn't hint to add the using statement the same way it does in normal C# pages.
|
416

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/

8 Comments

@vtortola : which web.config? the web.config file in Views folder, not the main web.config in root folder. ok?
I'd like to hopefully save someone a few minutes of pulling out their hair and say that if you're working within an area, you must add the namespace within the Web.config under /Areas/<AreaName>Views/ rather than /Views/.
@MatthijsWessels No it does not need to restart VS. Just build the project and it will take effect. At least I do this always. If a view is open, you have to close that view before build and re-open it after after build.
@Javad_Amiry, aha, I did rebuild, but didn't close the view.
Yes, this is the correct way. Not the Using statement at top of Razor page like in the OP selected answer....
|
34

For Library

@using MyNamespace

For Model

@model MyModel

2 Comments

Why is there no ; at the end?
@FrenkyB because this isn't C# code, it's Razor code. The 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.
27

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.

2 Comments

There will be a web.config section in RTM, but we also wanted to provide an API to do this because many users are starting to gravitate away from config. So we have both options available for you!
As of ASP.NET MVC 3 Beta this method no longer works. There is a new web.config section as explained here stackoverflow.com/questions/3875207/… . The AddGlobalImport method for importing a global namespace to all views has been moved to this class System.Web.WebPages.Razor.WebPagesRazorHost
16

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

2 Comments

This is actually a rather good answer, but the location of Microsoft.WebPages.Compilation.AddGlobalImport was changed to System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
The big advantage of using this method comes from the fact that the namespace will be usable in all views (including those within areas) while being declared in just one place.
14

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;

Comments

12

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>  
   }

Comments

11

You can try this

@using MyNamespace

Comments

3

"using MyNamespace" works in MVC3 RTM. Hope this helps.

Comments

3

I think in order import namespace in razor view, you just need to add below way:

@using XX.YY.ZZ

Comments

1

Depending on your need you can use one of following method:

Comments

0

in C# you can do it in the following ways

@using Microsoft.AspNetCore.Http;

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.