2013-11-27 2 views
1

MVC 응용 프로그램에서 이상한 문제가 발생했습니다. 우리는 RazorViewEngine을 상속하여 뷰 배열에서 커스텀 로직을 용이하게하기 위해 커스텀 뷰 엔진을 생성합니다.사용자 정의 부분보기 경로를 검색 할 때 파일이 없습니다.

우리는 잠재적보기 경로 목록이 있습니다

  PartialViewLocationFormats = new[] 
     { 
      "~/Views/Partial/Shared/Base/$thing/{0}.$otherthing.cshtml", 
      "~/Views/Partial/Shared/Base/$thing/{0}.cshtml", 
      "~/Views/Partial/Shared/Base/{0}.$otherthing.cshtml", 
      "~/Views/Partial/Shared/Base/{0}.cshtml" 
     }; 

그런 다음 우리가 오버라이드을 FileExists 방법, 같은 :

 private string ParsePath(ControllerContext controllerContext, string virtualPath) 
    { 
     string newPath = virtualPath; 
     BaseController controller = controllerContext.Controller as BaseController; 
     if (controller != null) 
     { 
      if (controller.Model != null) 
      { 

       if (!string.IsNullOrEmpty(controller.Model.Thing)) 
       { 
        newPath = newPath.Replace("$thing", controller.Model.Thing); 
       } 

       if (!string.IsNullOrEmpty(controller.Model.OtherThing)) 
       { 
        newPath = newPath.Replace("$otherthing", controller.Model.OtherThing); 
       } 
      } 
     } 

     return newPath; 
    } 

이 작품 : ParsePath 방법처럼 보인다

 protected override bool FileExists(ControllerContext controllerContext, string virtualPath) 
    { 
     return base.FileExists(controllerContext, this.ParsePath(controllerContext, virtualPath)); 
    } 

로컬로 괜찮지 만, 승 2010, IIS8 상자에 게시 후 다음과 같은 오류가 나타납니다.

'/Views/Partial/Shared/Base/Footer.blar.cshtml'파일이 존재하지 않습니다.

TargetSite: System.Web.Compilation.BuildResult GetVPathBuildResultInternal(System.Web.VirtualPath, Boolean, Boolean, Boolean, Boolean, Boolean) 

StackTrace: at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) yadda yadda yadda 

'/Views/Partial/Shared/Base/Footer.cshtml은'왜 예외를 던져 않는 존재 하는가? ... 나는 사이트 등 통합 모드 실행되고 있는지 확인했습니다

어떤 아이디어 -

내 직감 코드가 괜찮 및 IIS와 자사의 문제가 무엇입니까?

답변

0

응용 프로그램을 debug = "false"로 설정했을 때 최적화 MVC가 있기 때문에 이러한 현상이 발생합니다. 일단 debug = "true"로 설정하면이 오류는 나에게 돌아갔다.