it-swarm-ko.tech

ASP.NET MVC의 다른 컨트롤러에서보기 표시

다른 컨트롤러에서보기를 표시 할 수 있습니까?

예를 들어 CategoriesControllerCategory/NotFound.aspx 뷰가 있다고 가정 해보십시오. CategoriesController에있는 동안 View("NotFound")을 쉽게 반환 할 수 있습니다.

이제 ProductsController과 제품을 추가하는 작업 및 뷰가 있다고 가정 해보십시오. 그러나이 작업을 수행하려면 제품을 추가 할 카테고리가 있어야합니다. 예를 들면 Products/Add/?catid=10입니다.

catid을 기반으로 범주를 찾을 수 없으면 Products 컨트롤러 아래에 NotFound 뷰를 만드는 대신 Categories 컨트롤러에서 CategoryNotFound 뷰를 표시하려고합니다.

이것이 가능합니까 아니면 내가 잘못된 방식으로 물건을 구조화하고 있습니까? 이를 수행하는 좋은 방법이 있습니까?

230
dtc

예. 기본적으로 ASP.NET MVC는 \Views\[Controller_Dir]\에서 먼저 확인하지만 그 후에 뷰를 찾지 못하면 \Views\Shared에서 확인합니다.

공유 디렉토리는 특히 여러 컨트롤러에서보기를 공유하기 위해 존재합니다. 공유 서브 디렉토리에보기를 추가하기 만하면됩니다.

return View("~/Views/Wherever/SomeDir/MyView.aspx")을 수행하면 원하는 모든보기를 반환 할 수 있습니다.

259
womp

당신이 사용할 수있는:

return View("../Category/NotFound", model);

ASP.NET MVC 3에서 테스트되었지만 ASP.NET MVC 2에서도 작동합니다.

157
Guillaume86

네 가능합니다. 다음과 같이 RedirectToAction() 메소드를 반환하십시오.

return RedirectToAction("ActionOrViewName", "ControllerName");
44
doncadavona

RedirectToAction을 사용해 보셨습니까?

33
Paul Johnson

그래 넌 할수있어. 다음과 같은 조치를 리턴하십시오.

return RedirectToAction("View", "Name of Controller");

예를 들면 :

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");

이 접근법은 GET 메소드를 호출합니다

또한 다음과 같이 값을 조치에 전달할 수 있습니다.

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
17
ignacio chiazzo

JavaScript / jQuery 에서 컨트롤러를 호출 할 수도 있습니다. 404 또는 다른 usercontrol/page를 리턴하는 컨트롤러가 있다고 가정하십시오. 그런 다음 클라이언트 코드에서 어떤 조치를 취하면 컨트롤러를 시작하는 주소를 호출하여 결과를 HTML 형식으로 반환 할 수 있습니다. 당신의 페이지를 원합니다 ...

5
Marko

이 코드를 사용하면 모든 컨트롤러를 얻을 수 있습니다.

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
controller);
0
Yair GR