[asp.net] ViewResult ()와 ActionResult ()의 차이점
의 차이 무엇입니까 ViewResult()
및 ActionResult()
ASP.NET MVC의는?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
답변
ActionResult는 여러 하위 유형을 가질 수있는 추상 클래스입니다.
ActionResult 하위 유형
-
ViewResult- 지정된 뷰를 응답 스트림에 렌더링
-
PartialViewResult- 지정된 부분 뷰를 응답 스트림에 렌더링합니다.
-
EmptyResult- 빈 응답이 반환됩니다
-
RedirectResult- 지정된 URL로 HTTP 리디렉션을 수행합니다.
-
RedirectToRouteResult- 지정된 경로 데이터를 기반으로 라우팅 엔진에 의해 결정된 URL로 HTTP 리디렉션을 수행합니다.
-
JsonResult- 주어진 ViewData 객체를 JSON 형식으로 직렬화
-
JavaScriptResult- 클라이언트에서 실행할 수있는 JavaScript 코드를 반환합니다.
-
ContentResult- 보기없이 컨텐츠를 응답 스트림에 씁니다.
-
FileContentResult- 파일을 클라이언트에 반환
-
FileStreamResult- 파일을 클라이언트에 반환합니다.
-
FilePathResult- 클라이언트에 파일을 반환
자원
답변
ActionResult 는 추상 클래스입니다.
ViewResult 는 ActionResult 에서 파생됩니다 . 다른 파생 클래스로는 JsonResult 및 PartialViewResult가 있습니다.
이 방법으로 선언하면 다형성을 이용하고 동일한 방법으로 다른 유형을 반환 할 수 있습니다.
예 :
public ActionResult Foo()
{
if (someCondition)
return View(); // returns ViewResult
else
return Json(); // returns JsonResult
}
답변
“object”를 리턴하기 위해 모든 클래스의 모든 메소드를 작성하지 않는 것과 같은 이유입니다. 최대한 구체적이어야합니다. 단위 테스트를 작성하려는 경우 특히 유용합니다. 더 이상 반환 유형을 테스트하거나 결과를 캐스팅하지 않아도됩니다.
답변
ViewResult는 ActionResult의 하위 클래스입니다. View 메서드는 ViewResult를 반환합니다. 실제로이 두 코드 스 니펫은 똑같은 작업을 수행합니다. 유일한 차이점은 ActionResult 하나의 경우 컨트롤러가보기를 반환 할 것이라고 약속하지 않는다는 것입니다. 메소드 정의를 변경하지 않고 조건부로 RedirectResult 또는 다른 것을 반환하도록 메소드 본문을 변경할 수 있습니다.
답변
다른 답변에서 차이점을 올바르게 지적했지만 실제로 ViewResult를 반환하는 경우 기본 ActionResult 유형이 아닌 더 구체적인 유형 만 반환하는 것이 좋습니다. 이 원칙에 대한 명백한 예외는 메소드가 ActionResult에서 파생 된 여러 유형을 리턴하는 경우입니다.
이 원칙 뒤에있는 이유에 대한 자세한 내용은 관련 토론을 참조하십시오. ASP.NET MVC 컨트롤러 메서드가 ActionResult를 반환해야합니까?
답변
컨트롤러에서 아래 구문을 사용할 수 있습니다
public ViewResult EditEmployee() {
return View();
}
public ActionResult EditEmployee() {
return View();
}
위의 예에서는 반환 유형 만 다릅니다. 하나는 반환 ViewResult
하지만 다른 하나는 반환합니다 ActionResult
.
ActionResult는 추상 클래스입니다. 받아 들일 수 있습니다 :
ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult 등
의 ViewResult
하위 클래스입니다 ActionResult
.
답변
컨트롤러 i에서 ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult와 같이 MVC에서 11 개의 하위 유형을 가질 수있는 기본 클래스 인 ActionResult로 아래 코드를 지정했습니다.
public ActionResult Index()
{
if (HttpContext.Session["LoggedInUser"] == null)
{
return RedirectToAction("Login", "Home");
}
else
{
return View(); // returns ViewResult
}
}
//More Examples
[HttpPost]
public ActionResult Index(string Name)
{
ViewBag.Message = "Hello";
return Redirect("Account/Login"); //returns RedirectResult
}
[HttpPost]
public ActionResult Index(string Name)
{
return RedirectToRoute("RouteName"); // returns RedirectToRouteResult
}
마찬가지로 모든 하위 유형 메소드를 명시 적으로 지정하지 않고 ActionResult ()를 사용하여이 11 개의 하위 유형을 모두 리턴 할 수 있습니다. 다른 유형의 뷰를 반환하는 경우 ActionResult가 가장 좋습니다.