@using 선언 대신 Razor 페이지에 네임 스페이스를 추가하는 방법은 무엇입니까?


146

pages/namespaceswebconfig 의 요소에서 네임 스페이스를 가져 오는 데 사용해야하는 마술이 있습니까?

<pages>
    <namespaces>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
        <add namespace="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers"/>
        <add namespace="MyCustomHelpers"/>
    </namespaces>
</pages>

위의 작업 원하지 않습니다 . @using MyCustomHelpers페이지 맨 위에 배치하면 마술처럼 작동 하기 때문에 네임 스페이스가 정상 이라는 것을 알고 있습니다.

이것은 모든 페이지의 맨 위에 Html.SomeFunction()놓지 않고도 작업 할 수 있도록하기 위한 것입니다.@using


1
어떤 MVC 3 릴리스를 사용하고 있습니까?
marcind

나는 MVC 3 Preview를 사용했기 때문에 업그레이드 한 후에도 다른 답변이 효과가 있었지만 여전히 작동합니다 ... 그러나 귀하의 답변은 새 버전에 더 적합한 것으로 보입니다-곧 업그레이드 할 것입니다. 부끄러운 나는 두 가지 대답을 받아 들일 수 없다.
MyNameIsJob

대답에는 주석이 명확하지 않지만 MVC4에서는 네임 스페이스를 Web.Config 응용 프로그램이 아니라 \ Views 폴더의 Web.Config 파일에 추가해야합니다. <system.web.webPages.razor>설정 섹션은 이미있는 Web.Config에 존재한다!
벤 매킨타이어

답변:


163

업데이트 : MVC 3 RC : Razor HtmlHelper Extensions (또는 뷰의 다른 네임 스페이스)에 적용되는 업데이트 된 답변을 확인하십시오.

MVC 3 Preview 1과 MVC 3 Beta (오늘 출시) 사이에서 변경되었습니다. Preview 1에서 Razor는 WebForms 네임 스페이스 구성 섹션을 사용했습니다. 그러나 베타에는 WebForms와 분리 된 새로운 구성 섹션이 있습니다. 다음 사항을 web.config 파일에 추가하거나 템플릿에서 새 프로젝트로 시작해야합니다.

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="MyCustomHelpers" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

참고 닫으하고 변경 에디터으로 뽑힐 할 파일을 다시해야 할 수도있다.

web.config에서 Razor가 MVC3 Beta에서 작동하도록하는 데 필요한 다른 변경 사항이 있으므로 ~\View\Web.config베타 프로젝트 템플릿에 포함 된 파일을 살펴 보는 것이 가장 좋습니다 .


2
FWIW, pageBaseType="System.Web.Mvc.WebViewPage"속성도 필요 하다는 것을 알았습니다 . 답변이 업데이트되었습니다.
Portman

1
MVC 3 RC와 동일한 방법입니까?
Clark

1
+1 감사합니다. 오늘이 문제에 대한 답을 찾으려고 너무 많은 시간을 보냈습니다.
jessegavin

32
.cshtml 파일이 작동하지 않거나 오류가 발생하면 .cshtml 파일을 닫았다가 다시 열어야합니다.
Simon_Weaver

1
@Simon 예, 파일을 다시 열어야합니다. 편집기가 현재 web.config 변경 사항을보고 있지 않습니다.
marcind

50

네임 스페이스 선언을 Web.config루트 "Views"폴더 및 / 또는 현재 영역의 "Views"폴더 (보기 위치에 따라)에 넣으면 예상대로 작동합니다.


6

모든 면도기 페이지에 사용자 정의 네임 스페이스를 추가하는 방법을 설명하는 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 전에 실행됩니다.


메서드가 System.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport ( "Fully.Qualified.Namespace")로 이동되었습니다.
agrath

4

그만한 가치가있는 또 다른 기술은 기본적으로 뷰 엔진에 이미 포함되어있는 System 네임 스페이스에 도우미 확장 클래스를 추가하는 것입니다. 예를 들면 다음과 같습니다.

namespace System.Web.Mvc
{
    public static class HtmlHelper_MyExtensions
    {
        ...
    }
}

이런 식으로, 클래스를 포함하는 라이브러리가 참조되는 한 모든 것이 볼 수 있습니다. System.Web.Mvc클래스를 확장하고 있으므로 확장 메서드를 동일한 네임 스페이스에 넣는 것이 합리적으로 허용됩니다.


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