c# - 为什么 PageModel 和 ControllerBase 使用不属于它们的 ActionResult?
问题描述
我们知道PageModel
,MVC 使用的是控制器和动作方法的概念,而不是一个和页面处理程序,但是看一下 PageModel 的源代码:
public abstract class PageModel : IAsyncPageFilter, IFilterMetadata, IPageFilter {
...
public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment);
public virtual RedirectToActionResult RedirectToAction(string actionName, string controllerName, object routeValues, string fragment)
...
}
如果您查看ControllerBase
课程:
public abstract class ControllerBase {
...
public virtual RedirectToActionResult RedirectToAction(string actionName, string controllerName, object routeValues, string fragment);
public virtual RedirectToPageResult RedirectToPage(string pageName, string pageHandler, object routeValues, string fragment);
...
}
我很困惑,为什么 Razor pages 使用 MVC 的东西RedirectToActionResult
(controllerName 和 actionName),而 MVC 使用 Razor Page 的东西“XXXToPageResult”例如RedirectToPageResult
(pageName,pageHandler)?
解决方案
您可以在同一个 ASP.NET Core 应用程序中将 MVC 控制器和视图与 Razor 页面混合在一起,因此您应该能够从控制器重定向到 Razor 页面,以及从 Razor 页面重定向到控制器操作。