ChatGPT解决这个技术问题 Extra ChatGPT

How do I import a namespace in Razor View Page?

How to import a namespace in Razor View Page?

You can also add alias to your imported namespace stackoverflow.com/questions/4798293/mvc3-import-namespace/…

S
Selim Yildiz

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.


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.
a
amiry jd

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/


@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/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....
A
Alper Şaldırak

For Library

@using MyNamespace

For Model

@model MyModel

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.
G
Germán

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.


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
k
k-dev

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


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.
佚名

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;


M
Mahaveer Jangid

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

A
Abhishek Siddhu

You can try this

@using MyNamespace

H
Howard

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


j
jarlh

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

@using XX.YY.ZZ

I
Imran Javed

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?