private async Task ExecutePageAsync() { var modelType = _actionDescriptor.ModelType?.AsType(); var viewDataType = typeof(ViewDataDictionary <>).MakeGenericType(modelType ?? _actionDescriptor.PageType.AsType()); var viewData = (ViewDataDictionary)Activator.CreateInstance(viewDataType, _metadataProvider, _actionContext.ModelState); var tempData = _tempDataFactory.GetTempData(_actionContext.HttpContext); var pageContext = new PageContext(_actionContext, viewData, tempData, _viewOptions.HtmlHelperOptions) { ActionDescriptor = _actionDescriptor, ValueProviderFactories = _valueProviderFactories, }; var page = (Page)_factory.CreatePage(pageContext); pageContext.Page = page; object model = null; if (modelType == null) { model = page; } else { model = _modelFactory.CreateModel(pageContext); } if (model != null) { viewData.Model = model; } var tempDataPropertyTracker = _tempDataPropertyProvider.LoadAndTrackChanges(page, page.TempData); IActionResult result = null; var handler = _selector.Select(pageContext); if (handler != null) { var executor = ExecutorFactory.Create(handler.Method); result = await executor(page, model); } if (result == null) { result = new PageViewResult(page); } await result.ExecuteResultAsync(pageContext); tempDataPropertyTracker.SaveChanges(); }
private async Task ExecutePageAsync() { Type viewDataType = null; var viewDataProperty = _actionDescriptor.PageType.GetDeclaredProperty("ViewData"); if (viewDataProperty != null) { var viewDataPropertyType = viewDataProperty.PropertyType.GetTypeInfo(); if (viewDataPropertyType.IsGenericType && viewDataPropertyType.GetGenericTypeDefinition() == typeof(ViewDataDictionary <>)) { viewDataType = viewDataPropertyType.GetGenericArguments()[0]; } } ViewDataDictionary viewData; if (viewDataType == null) { viewData = new ViewDataDictionary <object>(_metadataProvider, _actionContext.ModelState); } else { viewData = (ViewDataDictionary)Activator.CreateInstance(typeof(ViewDataDictionary <>).MakeGenericType(viewDataType), _metadataProvider, _actionContext.ModelState); } var tempData = _tempDataFactory.GetTempData(_actionContext.HttpContext); var pageContext = new PageContext(_actionContext, viewData, tempData, _viewOptions.HtmlHelperOptions) { ActionDescriptor = _actionDescriptor, ValueProviderFactories = _valueProviderFactories, }; var page = (Page)_factory.CreatePage(pageContext); var tempDataPropertyTracker = _tempDataPropertyProvider.LoadAndTrackChanges(page, page.TempData); IActionResult result = null; var handler = _selector.Select(pageContext); if (handler != null) { var executor = ExecutorFactory.Create(handler.Method); result = await executor(page); } if (result == null) { result = new PageViewResult(page); } await result.ExecuteResultAsync(pageContext); tempDataPropertyTracker.SaveChanges(); }
public Task ExecuteAsync(PageContext pageContext, PageViewResult result) { if (result.Model != null) { result.Page.PageContext.ViewData.Model = result.Model; } var view = new RazorView(_razorViewEngine, _razorPageActivator, new IRazorPage[0], result.Page, _htmlEncoder); return(ExecuteAsync(pageContext, view, result.ContentType, result.StatusCode)); }
public static int TotalViewsFor(this HtmlHelper helper, Webpage webpage) { if (webpage == null) { return(0); } var session = helper.ViewContext.HttpContext.Get <ISession>(); AnalyticsPageView pageView = null; AnalyticsSession analyticsSession = null; AnalyticsUser analyticsUser = null; IQueryOver <AnalyticsPageView, AnalyticsPageView> queryOver = session.QueryOver(() => pageView) .JoinAlias(() => pageView.AnalyticsSession, () => analyticsSession) .JoinAlias(() => analyticsSession.AnalyticsUser, () => analyticsUser) .Where(x => x.Webpage.Id == webpage.Id); PageViewResult result = null; var viewResult = queryOver .SelectList(builder => builder .SelectGroup(() => pageView.Url) .WithAlias(() => result.Url) .SelectGroup(() => pageView.Webpage.Id) .WithAlias(() => result.WebpageId) .SelectCountDistinct(() => analyticsUser.Id) .WithAlias(() => result.Unique) .SelectCountDistinct(() => analyticsSession.Id) .WithAlias(() => result.Sessions) .SelectCountDistinct(() => pageView.Id) .WithAlias(() => result.Total) ) .TransformUsing(Transformers.AliasToBean <PageViewResult>()) .Take(1).SingleOrDefault <PageViewResult>(); return(viewResult == null ? 0 : viewResult.Total); }
public IPagedList <PageViewResult> Search(PageViewSearchQuery query) { AnalyticsPageView pageView = null; AnalyticsSession analyticsSession = null; AnalyticsUser analyticsUser = null; IQueryOver <AnalyticsPageView, AnalyticsPageView> queryOver = _session.QueryOver(() => pageView) .JoinAlias(() => pageView.AnalyticsSession, () => analyticsSession) .JoinAlias(() => analyticsSession.AnalyticsUser, () => analyticsUser); if (!string.IsNullOrWhiteSpace(query.Url)) { queryOver = queryOver.Where(view => view.Url.IsInsensitiveLike(query.Url, MatchMode.Anywhere)); } queryOver = queryOver.Where(() => pageView.CreatedOn >= query.From && pageView.CreatedOn <= query.To); switch (query.SearchType) { case PageViewSearchType.UsersOnly: queryOver = queryOver.Where(() => analyticsUser.User != null); break; case PageViewSearchType.AnonymousOnly: queryOver = queryOver.Where(() => analyticsUser.User == null); break; } PageViewResult result = null; IPagedList <PageViewResult> pageViewResults = queryOver .SelectList(builder => builder .SelectGroup(() => pageView.Url) .WithAlias(() => result.Url) .SelectGroup(() => pageView.Webpage.Id) .WithAlias(() => result.WebpageId) .SelectCountDistinct(() => analyticsUser.Id) .WithAlias(() => result.Unique) .SelectCountDistinct(() => analyticsSession.Id) .WithAlias(() => result.Sessions) .SelectCountDistinct(() => pageView.Id) .WithAlias(() => result.Total) ) .TransformUsing(Transformers.AliasToBean <PageViewResult>()) .OrderBy(Projections.CountDistinct(() => analyticsUser.Id)).Desc .ThenBy(Projections.CountDistinct(() => analyticsSession.Id)).Desc .ThenBy(Projections.CountDistinct(() => pageView.Id)).Desc .Paged <AnalyticsPageView, PageViewResult>(Projections.CountDistinct(() => pageView.Url), query.Page, enableCache: false); //todo enable cache when Nhibernate is updated to 4.1 List <int?> ids = pageViewResults.Select(viewResult => viewResult.WebpageId).Where(i => i.HasValue).ToList(); Dictionary <int, Webpage> webpages = _session.QueryOver <Webpage>() .Where(webpage => webpage.Id.IsIn(ids)) .Cacheable() .List() .ToDictionary(webpage => webpage.Id, webpage => webpage); foreach (PageViewResult pageViewResult in pageViewResults) { if (!pageViewResult.WebpageId.HasValue) { continue; } if (!webpages.ContainsKey(pageViewResult.WebpageId.Value)) { continue; } pageViewResult.WebpageName = webpages[pageViewResult.WebpageId.Value].Name; } return(pageViewResults); }