의 차이 무엇입니까 ViewResult()
및 ActionResult()
ASP.NET MVC의는?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
의 차이 무엇입니까 ViewResult()
및 ActionResult()
ASP.NET MVC의는?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
답변:
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 유형이 아닌 더 구체적인 유형 만 반환하는 것이 좋습니다. 이 원칙에 대한 명백한 예외는 메소드가 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가 가장 좋습니다.
시간을 절약하기 위해 https://forums.asp.net/t/1448398.aspx 의 이전 답변에있는 링크의 답변입니다.
ActionResult는 추상 클래스이며 ViewResult 클래스의 기본 클래스입니다.
MVC 프레임 워크에서는 ActionResult 클래스를 사용하여 조치 메소드가 리턴하는 오브젝트를 참조합니다. 그리고 ExecuteResult 메소드를 호출합니다.
그리고 ViewResult는이 추상 클래스에 대한 구현입니다. 주어진 뷰 이름으로 미리 정의 된 경로 (/ views / controllername /, / views / shared / 등)에서 뷰 페이지 (보통 aspx 페이지)를 찾으려고 시도합니다.
일반적으로 메소드가 더 구체적인 클래스를 리턴하도록하는 것이 좋습니다. 따라서 액션 메서드가 일부 뷰 페이지를 반환한다고 확신하는 경우 ViewResult를 사용할 수 있습니다. 그러나 작업 방법에 따라 뷰를 렌더링하거나 리디렉션을 수행하는 등의 동작이 다를 수 있습니다. 보다 일반적인 기본 클래스 ActionResult를 반환 유형으로 사용할 수 있습니다.