ActionResult是MVC中各种返回类型的基类。因此,您的操作必须返回ActionResult或从其派生的类才能工作。
所以我们可以使用
ToArray()
或者例如
public ContentResult Index()
{
return Content("Hello world");
}
或ActionResult
public ViewResult Index()
{
return View();
}
但也可以使用字符串!!!
public ActionResult Index()
{
if (ViewBag.Hello = "World")
return Json("");
return PartialView();
}
为什么不可能返回整数来查看? (或者也许是?)
public string Index()
{
return "Hello World";
}
并且不可能返回某个实体来查看(或者可能是?)
public int Index()
{
return 4;
}
我的问题是:当我们想渲染视图时,幕后发生了什么?
答案 0 :(得分:2)
我同意这是一个相当广泛的问题,但我想提出一些问题并回答你在问题中提出的一些观点。
您可以从操作方法返回int
,string
或object
,它只会返回对象的字符串表示形式。
因此,您不必返回类型为ActionResult
的对象才能使其工作,但ActionResult
通过各种实现启用了有用的功能,以便ASP.NET MVC Framework可以处理开箱即用的不同场景。
例如返回视图和处理要传递给视图的ViewModel:
return View(); // Default view without view model
return View(viewModelObject); // Default view with a view model
根据您的路由信息返回视图:
return View("viewName", viewModelObject);
使用路由信息执行重定向到其他页面:
return RedirectToAction(actionName, controllerName);
返回包含特定状态代码的页面:
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
返回JSON而不是视图:
return JsonResult(myObject);
以上所有示例都做了不同的事情,返回不同类型的结果并为您处理对象,这样您就不必自己编写行为 - 它们已准备好供您使用。
另一个方便的事情是,您可以创建自己的ActionResult
实现来创建自己的行为,因此在这方面它非常灵活。
我同意@Daniel J.G.
您应该更多地阅读有关ASP.NET MVC如何挂起的内容,并且对您来说将变得更加清晰。