Como importo um espaço para nome na página de exibição do Razor?

Respostas:

852

Finalmente encontrei a resposta.

@using MyNamespace

Para VB.Net:

@Imports Mynamespace

Dê uma olhada na resposta de @ravy amiry se você quiser incluir um espaço para nome no aplicativo.

Amitabh
fonte
4
Além disso: eles não podem entrar em blocos de código. (Você obterá um erro de execução)
Dan Esparza
5
Além disso, você não precisa do ponto e vírgula.
RPM1984
5
Este é apenas o período de más práticas. Por favor, não adicione isso no topo das suas páginas de barbear. Isso é uma bagunça etc ... A maneira correta é adicionar ao Views - web.config exatamente como @Javad_Amiry aponta.
quer
21
Não é uma prática ruim. É um recurso absolutamente necessário. O web.config é como uma instrução global using que ativa o namespace em TODAS as suas páginas. Pode não ser o que você deseja se tiver classes com o mesmo nome em diferentes espaços para nome. Você ainda terá um conflito se tentar usá-los no mesmo arquivo, mas poderá resolver isso facilmente em um único arquivo. Se você colocá-lo no web.config, o conflito surgirá em todas as suas páginas que usam uma das classes. Portanto, chamar essa má prática não faz nenhum sentido.
Triynko
4
Estou surpreso que o Intellisense não sugira adicionar a instrução using da mesma maneira que nas páginas C # normais.
Triynko 4/09/15
397

A primeira maneira é usar a @usinginstrução nos .cshtmlarquivos, que importa um espaço para nome apenas no arquivo atual e a segunda:

No arquivo "web.config" no Viewsdiretório " " do seu projeto (observe que não é o principal web.config na raiz do projeto) , localize esta seção:

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

você pode adicionar seu espaço para nome personalizado assim:

<add namespace="My.Custom" />

que adicionará o espaço para nome a todos os arquivos .cshtml (e / ou .vbhtml); Além disso, você pode alterar a herança de visualizações a partir daqui, como:

<pages pageBaseType="My.Custom.MyWebViewPage">

Saudações.


ATUALIZAÇÃO: Obrigado a @ Nick Silbersteinpor seu lembrete sobre áreas! Ele disse:

Se você estiver trabalhando em uma área , adicione o namespacedentro do Web.configsub em /Areas/<AreaName>/Views/vez de /Views/

ruivo amiry
fonte
10
@ vtortola: qual web.config? o arquivo web.config na pasta Views, não o principal web.config na pasta raiz. OK?
Amiry Ravy
9
Espero que alguém poupe alguns minutos arrancando os cabelos e diga que, se estiver trabalhando em uma área, adicione o espaço para nome no Web.config em / Areas / <AreaName> Views / em vez de / Visualizações/.
111111 Nick Silberstein
11
@MatthijsWessels Não, não é necessário reiniciar o VS. Basta criar o projeto e ele entrará em vigor. Pelo menos eu faço isso sempre. Se uma visão estiver aberta, você deverá fechá-la antes da construção e reabri-la após a construção.
Ravy amiry
2
@Javad_Amiry, aha, eu reconstruí, mas não fechei a exibição.
Matthijs Wessels
1
Sim, esta é a maneira correta. Não a declaração no topo da Navalha página Usando como na resposta OP selecionado ....
Tom Stickel
30

Para Biblioteca

@using MyNamespace

Para o modelo

@model MyModel
Alper Şaldırak
fonte
1
Por que não existe; no fim?
FrenkyB
2
@FrenkyB porque este não é um código C #, é um código Razor. O usingno início de um arquivo .cs é uma palavra-chave do compilador C #. O @usinginício de um arquivo .cshtml é uma dica para o mecanismo de modelo do Razor.
Mark
27

No ASP.NET MVC 3 Preview1, você pode importar um espaço para nome em todas as suas visualizações de navalha com esse código no Global.asax.cs

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

Espero que no RTM isso seja feito através da seção Web.config.

Alemão
fonte
6
Haverá uma seção web.config no RTM, mas também queremos fornecer uma API para fazer isso, porque muitos usuários estão começando a se afastar da configuração. Portanto, temos as duas opções disponíveis para você!
Andrew Stanton-Nurse
6
A partir do ASP.NET MVC 3 Beta, esse método não funciona mais. Há uma nova seção web.config, conforme explicado aqui stackoverflow.com/questions/3875207/… . O método AddGlobalImport para importar um namespace global para todas as vistas foi movido para esta System.Web.WebPages.Razor.WebPagesRazorHost classe
Germán
16

Encontrei este http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx, que explica como adicionar um espaço para nome personalizado a todas as suas páginas de barbear.

Basicamente, você pode fazer isso

using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
   public static void InitializeApplication()
   {
       CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
   }
}

e coloque o seguinte código no seu AssemblyInfo.cs

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]

o método InitializeApplication será executado antes do Application_Start em global.asax

k-dev
fonte
4
Esta é realmente uma resposta bastante boa, mas a localização de Microsoft.WebPages.Compilation.AddGlobalImportfoi alterada para System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu
2
A grande vantagem de usar esse método vem do fato de que o espaço para nome será utilizável em todas as visualizações (incluindo aquelas dentro de áreas) enquanto é declarado em apenas um local.
jahu
14

Um problema que você deve saber é que, quando você importa um espaço para nome web.configna Viewspasta, isso namespaceé importado APENAS para exibições nessa pasta . Significa que se você deseja importar um namespaceem uma área , também deve importar que namespace, no web.configarquivo dessa área , localizado na Viewspasta da área ;


fonte
11

Para namespace e Biblioteca

@using NameSpace_Name

Para o modelo

@model Application_Name.Models.Model_Name 

Para iterar a lista na página Razor (você deve usar o loop foreach para acessar os itens da lista)

@model List<Application_Name.Models.Model_Name>

@foreach (var item in Model)
   {  
          <tr>
                <td>@item.srno</td>
                <td>@item.name</td>
         </tr>  
   }
Veer Jangid
fonte
10

Você pode tentar isso

@using MyNamespace
Abhishek Siddhu
fonte
3

"using MyNamespace" funciona no MVC3 RTM. Espero que isto ajude.

Howard
fonte
2

Eu acho que, para importar o namespace no modo navalha, você só precisa adicionar abaixo o caminho:

@using XX.YY.ZZ
HiteshAjudiya
fonte
0

Dependendo da sua necessidade, você pode usar um dos seguintes métodos:

Imran Javed
fonte