public async Task ExecuteAsync(WidgetViewContext context) { var viewEngine = ViewEngine ?? ResolveViewEngine(context); var viewContext = context.ViewContext; var viewLocationService = ResolveViewLocationService(context); if (string.IsNullOrEmpty(ViewName)) { ViewName = DefaultViewName; } var locations = viewLocationService.Search(context.ComponentDescriptor); ViewEngineResult result = null; foreach (var viewFormat in locations) { string viewFullName = string.Format( CultureInfo.InvariantCulture, viewFormat, context.ComponentDescriptor.RootName, ViewName ); result = viewEngine.FindView(context.ViewContext, viewFullName + ".cshtml", false); if (!result.Success) { result = viewEngine.GetView(null, viewFullName + ".cshtml", false); } if (result.Success) { break; } } IEnumerable <string> searchedLocations = result.SearchedLocations; var view = result.EnsureSuccessful(searchedLocations).View; using (view as IDisposable) { var childViewContext = new ViewContext( viewContext, view, ViewData ?? context.ViewData, context.Writer); await view.RenderAsync(childViewContext); } }
private static IWidgetViewLocationResolveService ResolveViewLocationService(WidgetViewContext context) { return(context.ViewContext.HttpContext.RequestServices.GetRequiredService <IWidgetViewLocationResolveService>()); }
private static IViewEngine ResolveViewEngine(WidgetViewContext context) { return(context.ViewContext.HttpContext.RequestServices.GetRequiredService <ICompositeViewEngine>()); }