ASP中ViewResult()和ActionResult()的区别是什么?净MVC吗?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
ASP中ViewResult()和ActionResult()的区别是什么?净MVC吗?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
当前回答
在控制器中,可以使用下面的语法
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的子类。
其他回答
ViewResult是ActionResult的子类。View方法返回一个ViewResult。这两个代码段做的是完全一样的事情。唯一的区别是,对于ActionResult,你的控制器并不承诺返回一个视图——你可以改变方法体,有条件地返回一个RedirectResult或其他东西,而不改变方法定义。
在控制器中,可以使用下面的语法
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的子类。
在控制器中,我已经用ActionResult指定了下面的代码,这是一个基类,可以在MVC中有11个子类型,如: 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个子类型,而无需显式地指定每个子类型方法。 如果你要返回不同类型的视图ActionResult是最好的。
出于同样的原因,你不需要编写每个类的每个方法来返回"object"。你应该说得尽可能具体。如果您计划编写单元测试,这一点尤其有价值。不再测试返回类型和/或强制转换结果。
ActionResult是一个抽象类。
ViewResult派生自ActionResult。其他派生类包括JsonResult和PartialViewResult。
这样声明它是为了利用多态性并在同一方法中返回不同类型。
e.g:
public ActionResult Foo()
{
if (someCondition)
return View(); // returns ViewResult
else
return Json(); // returns JsonResult
}