我是 Razor 引擎的新手,只是有一个关于在 ASP.NET MVC 中生成响应的问题
首先我们知道视图引擎的作用就是将对视图的请求转化为ViewEngineResult对象,而Razor视图引擎实现了IViewEngine
public interface IViewEngine
{
ViewEngineResult FindView(ActionContext context, string viewName, bool isMainPage);
ViewEngineResult GetView(string executingFilePath, string viewPath, bool isMainPage);
}
在FindVieworGetView方法中,Razor 引擎返回一个ViewEngineResult对象:
// pseudo code for simplification
if view_found
return ViewEngineResult.Found(viewName, new RazorView(...));
实现为RazorView:IView
public class RazorView : IView
{
public string Path { get; }
public virtual Task RenderAsync(ViewContext context);
}
函数RenderAsync似乎是产生响应的人。
但是 .cshtml 文件也会被 Razor 引擎编译成 C# 类,下面是生成 index.cshtml 的 C# 代码的示例:
public class ASPV_Views_Home_Index_cshtml : RazorPage<string[]> {
...
public override async Task ExecuteAsync() {
...//this method also seems to generate response
}
}
所以ExecuteAsync似乎也产生了反应
最后,如果我们查看ViewResult操作方法返回的对象,则ViewResult实现ActionResult(implements IActionResult) 为
public class ViewResult : ActionResult
{
...
public override Task ExecuteResultAsync(ActionContext context);
}
ExecuteResultAsync似乎也产生了反应。
所以我们有三个候选人
1-RazorView.RenderAsync()
2-RazorPage.ExecuteAsync()
3-ViewResult.ExecuteResultAsync()
哪一个是真正产生响应的?
白衣染霜花
相关分类