当我们想要渲染视图时,幕后发生了什么
本文关键字:发生了 什么 视图 我们 | 更新日期: 2023-09-27 18:20:04
ActionResult 是在 MVC 中查看的各种返回类型的基类。因此,您的操作必须返回 ActionResult 或从中派生的类才能正常工作。
所以我们可以使用
public ContentResult Index()
{
return Content("Hello world");
}
或例如
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;
}
并且不可能返回一些实体进行查看(或者也许是?
public User Index()
{
return new User();
}
我的问题是:当我们想要渲染视图时,幕后发生了什么?
我同意这是一个相当广泛的问题,但我想解决并回答您在问题中提出的几点。
您可以从操作方法返回int
、string
或object
,它将简单地返回对象的字符串表示形式作为结果。
因此,您不必返回类型为 ActionResult
的对象即可使其正常工作,但 ActionResult
通过其各种实现启用有用的功能 ASP.NET 以便 MVC 框架可以直接处理不同的方案。
例如返回视图和处理要传递给视图的视图模型:
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.
的观点,你应该多读一些关于MVC如何 ASP.NET 的阅读,你会变得更加清楚。