当我们想要渲染视图时,幕后发生了什么

本文关键字:发生了 什么 视图 我们 | 更新日期: 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();
}

我的问题是:当我们想要渲染视图时,幕后发生了什么?

当我们想要渲染视图时,幕后发生了什么

我同意这是一个相当广泛的问题,但我想解决并回答您在问题中提出的几点。

您可以从操作方法返回intstringobject,它将简单地返回对象的字符串表示形式作为结果。

因此,您不必返回类型为 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 的阅读,你会变得更加清楚。