ASP.NET MVC의 다른 컨트롤러에서보기를 표시합니다
-
22-08-2019 - |
문제
다른 컨트롤러에서보기를 표시 할 수 있습니까?
예를 들어 a가 있습니다 CategoriesController
그리고 a Category/NotFound.aspx
보다. 그 동안 CategoriesController
, 나는 쉽게 돌아올 수있다 View("NotFound")
.
이제 내가 가지고 있다고 말합니다 ProductsController
그리고 제품을 추가하는 행동과보기. 그러나이 조치는 제품을 추가 할 카테고리가 있어야합니다. 예를 들어, Products/Add/?catid=10
.
내가 catid
, 나는 보여주고 싶다 NotFound
a 대신 범주 컨트롤러에서 봅니다 CategoryNotFound
제품 컨트롤러 아래에서 봅니다.
이것이 가능합니까 아니면 내가 잘못된 방식으로 물건을 구성하고 있습니까? 이것을하는 좋은 방법이 있습니까?
해결책
예. 기본적으로 ASP.NET MVC는 먼저 확인합니다 \Views\[Controller_Dir]\
, 그러나 그 후에는보기를 찾지 못하면 체크인합니다. \Views\Shared
.
공유 디렉토리는 특별히 여러 컨트롤러에서 뷰를 공유 할 수 있습니다. 공유 하위 디렉토리에 견해를 추가하면 좋습니다.
당신이한다면 return View("~/Views/Wherever/SomeDir/MyView.aspx")
원하는보기를 반환 할 수 있습니다.
다른 팁
당신이 사용할 수있는:
return View("../Category/NotFound", model);
ASP.NET MVC 3에서 테스트되었지만 ASP.NET MVC 2에서도 작동해야합니다.
네 가능합니다. 반환 a RedirectToAction()
다음과 같은 방법 :
return RedirectToAction("ActionOrViewName", "ControllerName");
당신은 시도 했습니까? RedirectToAction
?
그래 넌 할수있어. 다음과 같은 조치를 반환하십시오.
return RedirectToAction("View", "Name of Controller");
An example:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");
이 접근법은 GET 메소드를 호출합니다
또한 다음과 같은 작업에 값을 전달할 수 있습니다.
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
이 코드를 사용하면 모든 컨트롤러를 얻을 수 있습니다.
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext,
controller);