IT story

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

hot-time 2020. 6. 15. 08:09
반응형

@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
    {
        ...
    }
}

This way, as long as the library containing the class is referenced, everything will see it. Since you are extending a System.Web.Mvc class, it seems reasonably acceptable to put the extension methods in the same namespace.


Try closing and reopening the view after making sure the changes were made to the web.config in the root of view.

Closing and Reopening fixed my problem.

See here:

ASP.NET MVC 4 namespace issue in razor view

참고URL : https://stackoverflow.com/questions/3875207/how-to-add-extra-namespaces-to-razor-pages-instead-of-using-declaration

반응형