간단한 ASP.NET MVC 버전 1.0 응용 프로그램을 만들었습니다. 하나의 액션 인덱스가있는 ProductController가 있습니다. 보기에서 Product 하위 폴더에 해당 Index.aspx를 만들었습니다.ASP.NET MVC 뷰 엔진 해상도 시퀀스
그런 다음 Spark dll을 참조하고 동일한 Product보기 폴더에서 Index.spark를 만들었습니다. 내 기대는 제품 컨트롤러에서 색인 작업을 탐색 할 때 기본 WebFormViewEngine 전에 점화 엔진에 등록하기 때문에, 스파크 엔진을 사용해야하며, WebFormViewEngine 다른 모든 URL을 사용해야합니다
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new Spark.Web.Mvc.SparkViewFactory());
ViewEngines.Engines.Add(new WebFormViewEngine());
}
것처럼 위해 Application_Start 보인다.
그러나이 테스트에서는 Product 컨트롤러의 Index 작업도 WebFormViewEngine을 사용함을 보여줍니다.
WebFormViewEnginer (코드의 마지막 줄) 등록을 주석 처리하면 Spark 엔진에서 색인 작업이 렌더링되고 나머지 URL이 오류를 생성한다는 것을 알 수 있습니다 (기본 엔진이 없어짐). 내 모든 스파크 코드가 정확하다는 것을 증명합니다.
이제 내 질문은 뷰 엔진이 어떻게 해결 되었습니까? 등록 순서가 유효하지 않은 이유는 무엇입니까?
요약 : Index.aspx 파일을 제거하면 Index.spark가 사용됩니다. – LukLed
나는 아직도 이해하지 못한다. ViewLocationFormats는 VirtualPathProviderViewEngine에 정의되어 있으며 뷰 엔진 고유의 내부 구현입니다. ASP.NET MVC에 등록 된 여러 뷰 엔진이 있으면 뷰 엔진이 요청을 처리 할 수 있는지 여부를 하나씩 쿼리합니다. 첫 번째 뷰 엔진은 요청을 처리합니다. 제 경우에는 Spark와 WebFormViewEngine이 Index.aspx와 Index.spark가 있기 때문에 요청을 처리 할 수 있습니다. 그렇다면 왜 WebForViewEngine을 우선시합니까? – intangible02
@ intangible02 : 테스트를 거쳐 검증되었으므로, 근원을 파헤 치고 그에 대한 설명이 있습니다. – Aaronaught