[asp.net-mvc-3] @using 선언 대신 Razor 페이지에 네임 스페이스를 추가하는 방법은 무엇입니까?

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



답변

업데이트 : 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베타 프로젝트 템플릿에 포함 된 파일을 살펴 보는 것이 가장 좋습니다 .


답변

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


답변

모든 면도기 페이지에 사용자 정의 네임 스페이스를 추가하는 방법을 설명하는 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 네임 스페이스에 도우미 확장 클래스를 추가하는 것입니다. 예를 들면 다음과 같습니다.

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

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


답변

루트보기에서 web.config가 변경되었는지 확인한 후보기를 닫았다가 다시 열어보십시오.

닫고 다시 열면 문제가 해결되었습니다.

여기를 보아라:

면도기보기에서 ASP.NET MVC 4 네임 스페이스 문제


답변