나는 더 나은 해결책이 없지만 내 자신의 ViewEngine을 구현하려고합니다.
컨트롤러가 모듈에있어 표준 ASP.NET MVC 규칙 및 라우트를 해결할 수없는 경우.
지원하기 위해 자신의 ViewEngine을 구현해야한다고 생각합니다. 예를 들어
:
public class ModuleViewEngine: WebFormViewEngine
{
public ModuleViewEngine()
{
ViewLocationFormats = new[]
{
"~/views/{2}/{1}/{0}.aspx",
"~/views/{2}/{1}/{0}.ascx",
"~/views/Shared/{1}/{0}.aspx",
"~/views/Shared/{1}/{0}.ascx",
};
MasterLocationFormats = new[]
{
"~/views/{1}/{0}.master",
"~/views/Shared/{0}.master",
"~/views/{2}/{1}/{0}.master",
"~/views/{2}/Shared/{0}.master",
};
}
public override ViewEngineResult FindPartialView(ControllerContext controllerContext,
string partialViewName, bool useCache)
{
//coede
}
public override ViewEngineResult FindView(
ControllerContext controllerContext,
string viewName, string masterName, bool useCache)
{
//code
}
}
우리는 추가 매개 변수 (지역)을 수용하기 ViewLocationFormats 및 MasterLocationFormats 배열을 재정의. 보기 위치는 표준 문자열 서식 지정 자리 표시자를 사용합니다. 첫 번째 자리 표시자는 동작 이름을 나타냅니다. 두 번째 자리 표시자는 제어기 이름이고 마지막 자리 표시 자이며 은 모듈 이름 (지정된 경우)입니다.
FindPartialView 및 FindView 메서드가 있으므로이 메서드도 재정의해야합니다. 우리의 컨트롤러가 이제 컨트롤러 폴더의 하위 폴더에 상주하기 때문에
, 우리는 추가 컨트롤러 네임 스페이스를 등록해야 :
ControllerBuilder.Current.DefaultNamespaces.Add ("Module.Controllers.something");
기본 컨트롤러 빌더는 특정 컨트롤러에 대한 경로를 일치시킬 때 전체 어셈블리에서 컨트롤러를 찾는 을 반영하지 않으므로 필요합니다.
왜 그냥 영역을 사용할 수 있습니까? ASP.NET MVC 2에 있습니다. –