source

ASP의 "보기/공유" 폴더에 하위 디렉토리를 추가하는 중입니다.Net MVC 및 보기 호출

factcode 2023. 8. 17. 21:55
반응형

ASP의 "보기/공유" 폴더에 하위 디렉토리를 추가하는 중입니다.Net MVC 및 보기 호출

저는 현재 ASP를 이용하여 사이트를 개발하고 있습니다.네트 MVC3(레이저 포함)."보기/공유" 폴더 안에 "부분"이라는 하위 폴더를 추가하여 사이트를 더 잘 구성하기 위해 부분 보기를 모두 배치할 수 있습니다.

(레이저 사용) 보기를 호출할 때 항상 "부분" 폴더를 참조하면 문제 없이 이 작업을 수행할 수 있습니다.

@Html.Partial("Partials/{ViewName}")

제 질문은 "부분" 폴더를 목록에 추가할 수 있는 방법이 있는지 여부입니다.보기를 검색할 때 Net이 통과하므로 다음과 같이 "부분" 폴더를 참조할 필요 없이 내 보기를 호출할 수 있습니다.

@Html.Partial("{ViewName}")

도와주셔서 감사합니다!

해결했습니다.다음을 사용하여 레이저에서 부분 보기를 찾을 때 검색한 위치 목록에 "공유/부분" 하위 디렉터리를 추가하려면:

@Html.Partial("{NameOfView}")

먼저 RazorViewEngine을 기본 클래스로 사용하여 뷰 엔진을 만들고 다음과 같이 뷰 위치를 추가합니다.다시 말씀드리지만, MVC에서 만든 기본 "Views/Shared" 디렉토리 내에 만든 "Partials" 하위 디렉토리에 모든 부분 보기를 저장하고 싶었습니다.

public class RDDBViewEngine : RazorViewEngine
{
    private static readonly string[] NewPartialViewFormats = 
    { 
        "~/Views/{1}/Partials/{0}.cshtml",
        "~/Views/Shared/Partials/{0}.cshtml"
    };

    public RDDBViewEngine()
    {
        base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray();
    }       

}

위치 형식의 {1}은(는) 컨트롤러 이름이고 {0}은(는) 보기 이름입니다.

그런 다음 해당 보기 엔진을 MVC 보기 엔진에 추가합니다.global.asax의 Application_Start() 메서드에 있는 엔진 컬렉션:

ViewEngines.Engines.Add(new RDDBViewEngine()); 

답변 감사합니다.이렇게 하면 공유 폴더가 구성되지만 새로운 유형의 보기 엔진을 만드는 이유는 무엇입니까?방금 새로 만들었어요.RazorViewEngine세트 잇츠PartialViewLocationFormats그리고 그것을 목록에 추가했습니다.ViewEngines.

ViewEngines.Engines.Add(new RazorViewEngine
{
    PartialViewLocationFormats = new string[]
    {
        "~/Views/{1}/Partials/{0}.cshtml",
        "~/Views/Shared/Partials/{0}.cshtml"
    }
});

보기 엔진을 사용자 지정하는 것은 좋지만, 하위 폴더 부분만 사용하려면 그렇게 많이 필요하지 않습니다.

레이아웃 보기에 대해 수행된 것처럼 부분 보기에 대한 전체 경로를 사용합니다.

@Html.Partial("/Views/Shared/Partial/myPartial.cshtml")

누군가에게 도움이 되길...

ASP에서 이 작업을 수행하는 경우.NET Core, 간단히 시작 클래스로 이동, 아래ConfigureServices메소드, 그리고 put

services.AddMvc()
    .AddRazorOptions(opt => {
        opt.ViewLocationFormats.Add("/Views/{1}/Partials/{0}.cshtml");
        opt.ViewLocationFormats.Add("/Views/Shared/Partials/{0}.cshtml");
    });

다음 영역을 포함하도록 Lamarant의 훌륭한 답변을 업데이트했습니다.

public class RDDBViewEngine : RazorViewEngine
{
    private static readonly string[] NewPartialViewFormats =
    {
        "~/Views/{1}/Partials/{0}.cshtml",
        "~/Views/Shared/Partials/{0}.cshtml"
    };

    private static List<string> AreaRegistrations;

    public RDDBViewEngine()
    {
        AreaRegistrations = new List<string>();

        BuildAreaRegistrations();

        base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NewPartialViewFormats).ToArray();
        base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(areaRegistrations).ToArray();
    }

    private static void BuildAreaRegistrations()
    {
        string[] areaNames = RouteTable.Routes.OfType<Route>()
            .Where(d => d.DataTokens != null && d.DataTokens.ContainsKey("area"))
            .Select(r => r.DataTokens["area"].ToString()).ToArray();

        foreach (string areaName in areaNames)
        {
            AreaRegistrations.Add("~/Areas/" + areaName + "/Views/Shared/Partials/{0}.cshtml");
            AreaRegistrations.Add("~/Areas/" + areaName + "/Views/{1}/Partials/{0}.cshtml");
        }
    }
}

그런 다음 애플리케이션 시작에 다음을 포함하는 것을 잊지 마십시오.

public class MvcApplication : System.Web.HttpApplication
{

    protected void Application_Start()
    {
        ...

        ViewEngines.Engines.Add(new RDDBViewEngine()); 
    }
}

등록된 RazorView Engine의 부분 뷰 위치 형식을 업데이트할 수도 있습니다.아래 코드를 Application_Start in Global.asax에 넣습니다.

 RazorViewEngine razorEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault();
        if (razorEngine != null)
        {
            string[] newPartialViewFormats = new[] { 
                    "~/Views/{1}/Partials/{0}.cshtml",
                    "~/Views/Shared/Partials/{0}.cshtml"
            };
            razorEngine.PartialViewLocationFormats =
                razorEngine.PartialViewLocationFormats.Union(newPartialViewFormats).ToArray();
        }

사용 중인 뷰 엔진(웹 양식/레이저)에서 파생된 고유한 뷰 엔진 등록을 작성하고 생성자에서 원하는 위치를 지정하거나 이미 존재하는 위치 목록에 추가할 수 있습니다.

this.PartialViewLocationFormats = viewLocations;

뷰 과 같이 합니다.ViewEngines.Engines.Add(new MyViewEngineWithPartialPath());

언급URL : https://stackoverflow.com/questions/4973000/adding-sub-directory-to-view-shared-folder-in-asp-net-mvc-and-calling-the-view

반응형