[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 는 추상 클래스입니다.

ViewResultActionResult 에서 파생됩니다 . 다른 파생 클래스로는 JsonResultPartialViewResult가 있습니다.

이 방법으로 선언하면 다형성을 이용하고 동일한 방법으로 다른 유형을 반환 할 수 있습니다.

예 :

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가 가장 좋습니다.