2011-02-03 3 views
4

저는 페이지를 생성하기위한 주 엔진으로 MVC가 사용되는 CMS를 작성했습니다.MVC보기가 작동하려면 View 디렉토리에 있어야합니까?

나는 잘 할거야,하지만 필요하다면 사이트마다 그리고면별로 독특한 면도기 템플릿을 만드는 능력을 원했다.

내 규칙에 따르면 각 프로젝트마다 URL과 연결된 고유 코드가 있어야합니다.

각 프로젝트 사이트의 자산은 해당 위치가 프로젝트와 관련된 방식으로 저장됩니다.

따라서 C0001 프로젝트와 관련된 자산은 assets\C0001\에 저장되고 C0002 : assets\C0002\에 저장됩니다.

물건을 깔끔하게 유지하려면 면도날 템플릿을 assets\[ProjectCode] 위치에있는 프로젝트와 연결시켜야했지만 문제는 ViewBag not existing in context에 대한 오류가 발생했습니다.

그래서이 작동하지 않습니다 : 그것은 외부에 알려진이기 때문에, 내가 처음 레이아웃 렌더링 나던 추측하고

Layout = string.Concat("~/Views/Shared/_",ViewBag.ProjectNumber,"Layout.cshtml"); 

: 다음이 페이지를 렌더링으로

Layout = string.Concat("~/assets/",ViewBag.ProjectNumber,"/_Layout.cshtml"); 

조회 영역을 검색 하시겠습니까? 그러나 파일이 어디에 있는지를 말하면서 문제가 무엇인지 알지 못합니다.

예제 2의 코드를 사용하여 작업하게되어 기쁩니다. 그러나 상당수의 프로젝트 사이트가 공유 뷰 디렉터리를 매우 바쁜 후에 의미 할 수 있습니다.

왜 조회수가 Views 디렉토리에 존재해야하는지 이유가 있는지 궁금하십니까?

+0

지역을 사용해야합니다. – SLaks

+0

@marcind : 귀하의 권리, 수정 주셔서 감사합니다 –

답변

7

당신은 당신의 Views 디렉토리에있는 web.config를 복사하여 Assets 디렉토리에 복사를 둘 필요가 있습니다. 레이아웃의 전체 경로를 제공해야하므로 이는 검색 경로 문제가 아니기 때문에 web.config에 정보가 필요하므로보기를 올바르게 초기화해야합니다.

+0

고마워,이 작품, CSS는 렌더링이 중지되었습니다,하지만 올바른 방향으로 한 걸음으로보기를 표시합니다. –

+0

web.config를 설치하면이 디렉토리의 CSS 파일이 제공되지 않습니다 (이유를 파악하지 못했습니다). 그래서 불행히도 당신은 CSS를 별도의 디렉토리 트리에서 pu해야합니다 – Clicktricity

+0

이 작업을했습니다; httphandler를 찾아서 변경하면 동사는 다음을 보여줍니다 :''그래서 그것은보기 파일만을 찾으며, 나머지는 남겨 둡니다. –

4

기본적으로 RazorViewEngineViews 디렉토리를 검색하도록 구성됩니다.

다른 경로로 자신의 RazorViewEngine 인스턴스를 만들고이를 ViewEngines.Engines에 추가하여 변경할 수 있습니다.

그것의 기본 경로는

AreaViewLocationFormats = new[] { 
    "~/Areas/{2}/Views/{1}/{0}.cshtml", 
    "~/Areas/{2}/Views/{1}/{0}.vbhtml", 
    "~/Areas/{2}/Views/Shared/{0}.cshtml", 
    "~/Areas/{2}/Views/Shared/{0}.vbhtml" 
}; 
AreaMasterLocationFormats = new[] { 
    "~/Areas/{2}/Views/{1}/{0}.cshtml", 
    "~/Areas/{2}/Views/{1}/{0}.vbhtml", 
    "~/Areas/{2}/Views/Shared/{0}.cshtml", 
    "~/Areas/{2}/Views/Shared/{0}.vbhtml" 
}; 
AreaPartialViewLocationFormats = new[] { 
    "~/Areas/{2}/Views/{1}/{0}.cshtml", 
    "~/Areas/{2}/Views/{1}/{0}.vbhtml", 
    "~/Areas/{2}/Views/Shared/{0}.cshtml", 
    "~/Areas/{2}/Views/Shared/{0}.vbhtml" 
}; 

ViewLocationFormats = new[] { 
    "~/Views/{1}/{0}.cshtml", 
    "~/Views/{1}/{0}.vbhtml", 
    "~/Views/Shared/{0}.cshtml", 
    "~/Views/Shared/{0}.vbhtml" 
}; 
MasterLocationFormats = new[] { 
    "~/Views/{1}/{0}.cshtml", 
    "~/Views/{1}/{0}.vbhtml", 
    "~/Views/Shared/{0}.cshtml", 
    "~/Views/Shared/{0}.vbhtml" 
}; 
PartialViewLocationFormats = new[] { 
    "~/Views/{1}/{0}.cshtml", 
    "~/Views/{1}/{0}.vbhtml", 
    "~/Views/Shared/{0}.cshtml", 
    "~/Views/Shared/{0}.vbhtml" 
}; 
+0

고마워요. 이것은 내가 필요한 것입니다. 'Global.asax # Application_Start()'에'RazorViewEngine'의 커스텀 인스턴스를 등록했을 때, 커스텀 뷰 경로에 대한 Intellisense 지원까지 받았습니다. 매우 도움이됩니다. –