우리의 솔루션 계층 구조는 다음과 같습니다ASP.NET MVC 사용자 정의보기 라우팅
컨트롤러 \ 범주 \보기
예 : 컨트롤러 DataAnalysis \ DataRetrieve 지금
나는지도를하고 싶습니다 \를 사용자가 URL의 뷰 이름을 입력하면 자동으로 해당 컨트롤러에 URL을 매핑합니다.
IE : localhost : 1234 \ DataAnalysis \ DataRetrieve
는
마찬가지로, 조치를 포함한 모든 URL 요청이 해당 뷰를 검색해야
보기 \ DataAnalysis \ DataRetrieve \에
IE를 Index.cshtml을지도해야 : 로컬 호스트 : 1234 \ DataAnalysis \ DataRetrieve \
TestAction이
에 매핑해야보기 \ DataAnalysis \ DataRetrieve \ TestAction.cshtml
현재, 우리는이 범주를 무시하고보기를 반환하지, 나는 URL 위에 표시된 입력하면 의미
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
}
라우팅 기본을 사용하고 있습니다.
위의 동작을 위해 라우팅을 사용자 정의 할 수있는 방법이 있습니까?
--edit
는 의견에 따라 내 질문에 명확히하기 위해, 여기에 내가 localhost를 호출하는 경우 이제 내 솔루션 탐색기을의 스크린 샷이다 : 12,346/DataAnalysis/DataRetrieve를이해야 나를 색인으로 데려가. 이렇게 라우팅하면 문제가되지 않습니다.
routes.MapRoute(
name: "ExampleRouting",
url: "{category}/{controller}/{action}"
);
여기에 문제가 있습니다. 나는 또한이처럼 내 파일 구조를 정리하고 싶습니다 : 나는 dataretrieve의 인덱스를 검색 할 때 기본적으로
, 그것은 DataRetrieve \ 색인되지 조회수 \ 뷰에서 보이는 \ DataAnalysis \ DataRetrieve \ 색인.
이 동작을 어떻게 변경합니까?
Edit2가이 ------------------------
대답을 바탕으로, 내가 추가 한 사용자 지정보기의 엔진에 등록 Application_Start, 내 경로를 업데이트했습니다. 여전히 동일한 문제가 있습니다.
글로벌.에서보기 위치를 해결 asax
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Add(new SPCViewEngine());
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
}
}
RouteConfig.cs
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{category}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", category = "Login", id = UrlParameter.Optional }
);
}
SPCViewEngine (사용자 정의보기 엔진) 내가 제대로 질문을 이해하면
public class SPCViewEngine : RazorViewEngine
{
public SPCViewEngine()
: base()
{
ViewLocationFormats = new[] {
"~/Views/{1}/%1/{0}.cshtml",
"~/Views/{1}/%1/{0}.vbhtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Shared/{0}.vbhtml"
};
PartialViewLocationFormats = new[] {
"~/Views/%1/{1}/{0}.cshtml",
"~/Views/%1/{1}/{0}.vbhtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Shared/{0}.vbhtml"
};
}
protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath)
{
var categoryName = controllerContext.RouteData.Values["category"].ToString();
return base.CreatePartialView(controllerContext, partialPath.Replace("%1", categoryName));
}
protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath)
{
var categoryName = controllerContext.RouteData.Values["category"].ToString();
return base.CreateView(controllerContext, viewPath.Replace("%1", categoryName), masterPath);
}
protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
{
var categoryName = controllerContext.RouteData.Values["category"].ToString();
return base.FileExists(controllerContext, virtualPath.Replace("%1", categoryName));
}
}
그래서 DataAnalysis이 컨트롤러, 또는 프로젝트의 이름 및 DataRetrieve이 있다는 것이다 있어야한다 여기에 등록 제어 장치? – krillgar
나는 혼란 스럽거나 어쩌면 당신입니다. 라우팅은보기와 관련이 없습니다. 라우팅은 컨트롤러 작업에만 연결됩니다. –
지역을 사용하여 애플리케이션을 구성하는 것이 좋습니다. 이에 대해서는 http://msdn.microsoft.com/en-us/library/ee671793(v=vs.100).aspx를 참조하십시오. – Onots