Razor View Page에서 네임 스페이스를 가져 오려면 어떻게합니까?


답변:


852

마침내 답을 찾았습니다.

@using MyNamespace

VB.Net의 경우 :

@Imports Mynamespace

앱에 네임 스페이스를 포함하려면 @ravy amiry의 답변을 살펴보십시오 .


4
또한 : 그들은 코드 블록으로 갈 수 없습니다. (런타임 오류가 발생합니다)
Dan Esparza

5
또한 세미콜론이 필요하지 않습니다.
RPM1984

5
이것은 단지 나쁜 연습 기간입니다. 이것을 면도기 페이지 위에 추가하지 마십시오. 이것은 혼란 스럽습니다 ... 올바른 방법은 @Javad_Amiry가 지적한 것처럼 Views-web.config에 추가하는 것입니다.
Tom Stickel

21
나쁜 습관이 아닙니다. 꼭 필요한 기능입니다. web.config는 모든 페이지에서 네임 스페이스를 활성화하는 전역 using 문과 같습니다. 다른 네임 스페이스에 동일한 이름을 가진 클래스가있는 경우에는 원하는 것이 아닐 수도 있습니다. 동일한 파일에서 사용하려고해도 여전히 충돌이 발생하지만 단일 파일 내에서 쉽게 해결할 수 있습니다. web.config에 고정하면 클래스 중 하나를 사용하는 모든 페이지에서 충돌이 발생합니다. 따라서이 나쁜 습관을 부르는 것은 전혀 의미가 없습니다.
Triynko

4
Intellisense가 using C 문을 일반적인 C # 페이지에서와 동일한 방식으로 추가한다고 암시하지 않습니다.
Triynko

397

첫 번째 방법은 파일 @using에서 use 문 을 사용 .cshtml하여 네임 스페이스를 현재 파일로만 가져오고 두 번째 방법은

Views프로젝트의 " "디렉토리에 있는 "web.config"파일 ( 프로젝트 루트의 기본 web.config 가 아님 ) 에서 다음 섹션을 찾으십시오.

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

다음과 같이 사용자 정의 네임 스페이스를 추가 할 수 있습니다.

<add namespace="My.Custom" />

그러면 네임 스페이스가 모든 .cshtml (및 / 또는 .vbhtml) 파일에 추가됩니다. 또한 다음과 같이 뷰 상속을 변경할 수 있습니다.

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

문안 인사.


업데이트 :Nick Silberstein 영역에 대한 그의 알림에 @ 덕분에 ! 그는 말했다 :

당신이 내에서 작업하는 경우 지역 , 당신은 추가해야합니다 namespaceWeb.config에서 /Areas/<AreaName>/Views/보다는 /Views/


10
@ vtortola : 어떤 web.config? 루트 폴더의 기본 web.config가 아니라 Views 폴더의 web.config 파일 확인?
ravy amiry

9
머리카락을 뽑아 몇 분 동안 누군가를 구하고 싶습니다. 지역 내에서 작업하는 경우 /가 아닌 / Areas / <AreaName> Views / 아래에 Web.config 내에 네임 스페이스를 추가해야한다고 말하고 싶습니다 견해/.
Nick Silberstein 1

11
@MatthijsWessels 아니요 VS를 다시 시작할 필요가 없습니다. 프로젝트를 빌드하기 만하면 적용됩니다. 적어도 나는 항상 이것을한다. 뷰가 열려 있으면 빌드하기 전에 해당 뷰를 닫고 빌드 후에 다시 열어야합니다.
ravy amiry

2
@Javad_Amiry, aha, 나는 재건했지만 뷰를 닫지 않았습니다.
Matthijs Wessels

1
예, 이것이 올바른 방법입니다. OP 선택 답변과 같이 Razor 페이지 상단의 Using 문이 아닙니다 ....
Tom Stickel

30

도서관

@using MyNamespace

모형을 위해

@model MyModel

1
왜 없는가? 결국?
FrenkyB

2
@FrenkyB는 C # 코드가 아니기 때문에 Razor 코드입니다. using.cs 파일의 시작 부분은 C # 컴파일러 키워드입니다. @using.cshtml 파일의 시작 부분은 면도기 템플릿 엔진에 힌트입니다.
Mark

27

ASP.NET MVC 3 Preview1에서는 Global.asax.cs의이 코드를 사용하여 모든 면도기보기에서 네임 스페이스를 가져올 수 있습니다.

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

RTM에서 Web.config 섹션을 통해이 작업을 수행하기를 바랍니다.


6
RTM에는 web.config 섹션이 있지만 많은 사용자가 구성을 벗어나기 시작하기 때문에이를 수행하기위한 API를 제공하고자했습니다. 따라서 두 가지 옵션을 모두 사용할 수 있습니다!
Andrew Stanton-Nurse

6
ASP.NET MVC 3 Beta부터는이 방법이 더 이상 작동하지 않습니다. 여기에 설명 된대로 새로운 web.config 섹션이 있습니다 . stackoverflow.com/questions/3875207/… 전역 네임 스페이스를 모든 뷰로 가져 오기위한 AddGlobalImport 메소드가이 클래스 System.Web.WebPages.Razor.WebPagesRazorHost
Germán

16

나는이 발견 http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx 모든 면도기 페이지에 사용자 정의 네임 스페이스를 추가하는 방법을 설명한다.

기본적으로 이것을 만들 수 있습니다

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

AssemblyInfo.cs에 다음 코드를 넣습니다.

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

InitializeApplication 메소드는 global.asax에서 Application_Start 전에 실행됩니다.


4
이것은 실제로 좋은 대답이지만 위치는 Microsoft.WebPages.Compilation.AddGlobalImport로 변경되었습니다 System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport.
jahu

2
이 방법을 사용하면 얻을 수있는 가장 큰 장점은 네임 스페이스를 한 곳에서 선언하는 동안 영역 내의 뷰를 포함하여 모든 뷰에서 사용할 수 있다는 것입니다.
jahu

14

알아야 할 한 가지 문제는 web.configin Views폴더 를 통해 네임 스페이스를 가져올 때 해당 폴더의 뷰에 대해 JUST 를 가져온다는 것 namespace입니다 . 당신은을 가져 오려면 수단은 에서 지역의 전망 , 당신은 또한 가져와야합니다 그 지역의에서, 지역의에있는 파일, 폴더,namespacenamespaceweb.configViews


11

네임 스페이스 및 라이브러리

@using NameSpace_Name

모형을 위해

@model Application_Name.Models.Model_Name 

Razor 페이지의 목록 반복 (목록 항목에 액세스하려면 foreach 루프를 사용해야 함)

@model List<Application_Name.Models.Model_Name>

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


3

"MyNamespace 사용"은 MVC3 RTM에서 작동합니다. 도움이 되었기를 바랍니다.


2

면도기 뷰에서 네임 스페이스를 가져 오려면 아래 방법을 추가하면됩니다.

@using XX.YY.ZZ

0

필요에 따라 다음 방법 중 하나를 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.