c# - asp.net mvc 부분뷰




다른 폴더에서 부분 렌더링(공유되지 않음) (6)

뷰를 다른 폴더에서 부분 렌더링 (사용자 정의 컨트롤) 할 수 있습니까? 미리보기 3에서는 RenderUserControl을 전체 경로로 호출했지만 이전에 미리보기 5로 업그레이드하면 더 이상 가능하지 않습니다. 대신 RenderPartial 메서드가 있지만 원하는 기능을 제공하지 않습니다.


Views / Account 폴더에있는 myPartial.ascx라는 사용자 정의 컨트롤의 경우 다음과 같이 작성하십시오.

<%Html.RenderPartial("~/Views/Account/myPartial.ascx");%>

WebFormsViewEngine의 기반이되는 VirtualPathProviderViewEngine은 경로 앞에 "~"및 "/"문자를 지원하여 위의 예제가 작동해야합니다.

귀하의 예제에서 "~ / Account / myPartial.ascx"경로를 사용하는 것으로 나타 났지만 사용자 정의 컨트롤이 Views / Account 폴더에 있다고 언급했습니다. 시도해 봤어?

<%Html.RenderPartial("~/Views/Account/myPartial.ascx");%>

또는 귀하의 질문에 오타가 있습니까?


너는 이걸 시도해야 해.

~/Views/Shared/parts/UMFview.ascx

코드 앞에 ~/Views/ 를 배치하십시오.


이 다른 경로를 많이 사용하는 경우 항상 경로를 지정하지 않고도이 문제를 영구적으로 해결할 수 있습니다. 기본적으로 View 폴더와 Shared 폴더에서 부분 뷰를 확인합니다. 하지만 하나 추가하길 원합니다.

Models 폴더에 클래스를 추가하십시오.

public class NewViewEngine : RazorViewEngine {

   private static readonly string[] NEW_PARTIAL_VIEW_FORMATS = new[] {
      "~/Views/Foo/{0}.cshtml",
      "~/Views/Shared/Bar/{0}.cshtml"
   };

   public NewViewEngine() {
      // Keep existing locations in sync
      base.PartialViewLocationFormats = base.PartialViewLocationFormats.Union(NEW_PARTIAL_VIEW_FORMATS).ToArray();
   }
}

그런 다음 Global.asax.cs 파일에 다음 줄을 추가하십시오.

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

파일 확장명과 함께보기의 경로 만 포함하면됩니다.

면도칼:

@Html.Partial("~/Views/AnotherFolder/Messages.cshtml", ViewData.Model.Successes)

ASP.NET 엔진 :

<% Html.RenderPartial("~/Views/AnotherFolder/Messages.ascx", ViewData.Model.Successes); %>

그게 문제가 아니라면, RenderUserControl에서 사용했던 코드를 포함시켜 주시겠습니까?


RenderAction("myPartial","Account"); 사용해보십시오 RenderAction("myPartial","Account");





renderpartial