programing

View Result()와 Action Result()

lastcode 2023. 5. 2. 22:44
반응형

View Result()와 Action Result()

사이의 차이점은 무엇입니까?ViewResult()그리고.ActionResult()ASPNET NET MVC?

public ViewResult Index()
{
    return View();
}

public ActionResult Index()
{
    return View();
}

ActionResult는 여러 하위 유형을 가질 수 있는 추상 클래스입니다.

작업 결과 하위 유형

  • 결과 보기 - 지정된 보기를 응답 스트림에 렌더링합니다.

  • PartialViewResult - 지정한 부분 뷰를 응답 스트림에 렌더링합니다.

  • 결과 - 빈 응답이 반환됩니다.

  • 결과 리디렉션 - 지정된 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
}

모든 클래스의 모든 메소드를 작성하여 "객체"를 반환하지 않는 것과 같은 이유입니다.당신은 가능한 한 구체적으로 말해야 합니다.이것은 단위 테스트를 작성하려는 경우 특히 유용합니다.더 이상 리턴 유형을 테스트하거나 결과를 캐스팅할 필요가 없습니다.

ViewResult는 ActionResult의 하위 클래스입니다.View 메서드는 ViewResult를 반환합니다.그래서 이 두 코드 조각들은 정확히 같은 일을 합니다.유일한 차이점은 ActionResult 하나에서는 컨트롤러가 보기를 반환하지 않는다는 것입니다. 메서드 정의를 변경하지 않고 RedirectResult 또는 다른 것을 조건부로 반환하도록 메서드 본문을 변경할 수 있습니다.

다른 답변에서는 차이를 정확히 지적했지만 실제로 ViewResult만 반환하는 경우에는 기본 ActionResult 유형이 아닌 보다 구체적인 유형을 반환하는 것이 좋습니다.이 원칙에 대한 분명한 예외는 메서드가 ActionResult에서 파생된 여러 유형을 반환하는 경우입니다.

이 원칙 뒤에 있는 이유에 대한 전체적인 논의는 여기에서 관련 논의를 참조하십시오.NET MVC 컨트롤러 메서드가 작업 결과를 반환합니까?

컨트롤러에서 아래 구문을 사용할 수 있습니다.

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.

컨트롤러에서 나는 MVC에서 11개의 하위 유형을 가질 수 있는 기본 클래스인 ActionResult로 아래 코드를 지정했습니다.ViewResult, PartialViewResult, EmptyResult, RedirectResult, RedirectToRouteResult, JsonResult, JavaScriptResult, ContentResult, FileContentResult, FileStreamResult, FilePathResult.

    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개 하위 유형을 모두 반환할 수 있습니다.다른 유형의 보기를 반환하는 경우 작업 결과가 가장 좋습니다.

시간을 절약하기 위해 여기 https://forums.asp.net/t/1448398.aspx 의 이전 답변에 있는 링크의 답변이 있습니다.

ActionResult는 추상 클래스이며 ViewResult 클래스의 기본 클래스입니다.

MVC 프레임워크에서는 ActionResult 클래스를 사용하여 작업 메서드가 반환하는 개체를 참조합니다.그리고 ExecuteResult 메서드를 호출합니다.

ViewResult는 이 추상 클래스에 대한 구현입니다.지정된 보기 이름으로 미리 정의된 일부 경로(/views/controlname/, /views/shared/ 등)에서 보기 페이지(일반적으로 asx 페이지)를 찾습니다.

일반적으로 메소드가 보다 구체적인 클래스를 반환하도록 하는 것이 좋습니다.따라서 작업 방법이 일부 보기 페이지를 반환할 것으로 확신하면 결과 보기를 사용할 수 있습니다.그러나 작업 방법에 보기 렌더링 또는 리디렉션 수행과 같은 다른 동작이 있을 수 있습니다.보다 일반적인 기본 클래스 ActionResult를 반환 유형으로 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4743741/difference-between-viewresult-and-actionresult

반응형