/// <summary> /// Tworzenie modelu /// </summary> /// <typeparam name="T">Typ obiektu</typeparam> /// <typeparam name="U">TYp filtra</typeparam> /// <param name="filterKey">Klucz do zapisanego filtra w sesji</param> /// <param name="settingsKey">Klucz do zapisanych stawień w sesji</param> /// <param name="page">Strona</param> /// <param name="sortExpression">Wyrażenie sortowania</param> /// <param name="accending">rosnące?</param> /// <param name="repo">Analizowany zbiór</param> /// <returns></returns> protected T CreateModel <T, U, Q>( FilterSettingsKey filterKey, PageSettingsKey settingsKey, int?page, string sortExpression, bool?accending, IQueryable <Q> repo, delegateFilter <U, Q> method) where T : ListViewModel where U : ViewModelFilterBase where Q : Entity { var filter = PageSettingsOrder <U>(filterKey, settingsKey, ref page, ref sortExpression, ref accending); page = page ?? 1; sortExpression = string.IsNullOrEmpty(sortExpression) ? "Id" : sortExpression; accending = !accending.HasValue || accending.Value; // Przygotowanie informacji o stronnicowaniu var paginationInfo = new AdPaginationInfo { Accending = (bool)accending, ItemsPerPage = ItemsPerPage, RequestedPage = (int)page, SortExpression = sortExpression }; // Pobranie danych z repozytorium var query = repo; filter = method(ref query, filter); paginationInfo.OutResultsFound = query.Count(); int correctPageNo; var skip = GetSkip(paginationInfo.RequestedPage, paginationInfo.ItemsPerPage, paginationInfo.OutResultsFound, out correctPageNo); paginationInfo.RequestedPage = correctPageNo; if (PageSettings.GetFromSession(PageSettingsKey.CampaignCategoriesPageSettings) != null) { PageSettings.GetFromSession(PageSettingsKey.CampaignCategoriesPageSettings).Page = paginationInfo.RequestedPage; } query = query.OrderBy(paginationInfo.SortExpression, paginationInfo.Accending).Skip(skip).Take(paginationInfo.ItemsPerPage); var test = query.ToList(); var ret = Activator.CreateInstance <T>(); // Zbudowanie modelu listy ret.Query = (IQueryable <Entity>)query; ret.CurrentPage = paginationInfo.RequestedPage; ret.SortExpression = paginationInfo.SortExpression; ret.NumberOfResults = paginationInfo.OutResultsFound; ret.ItemsPerPage = paginationInfo.ItemsPerPage; ret.SortAccending = paginationInfo.Accending; ret.FilerBase = filter; return(ret); }
protected T CreateModel <T, U, Q>( FilterSettingsKey filterKey, PageSettingsKey settingsKey, int?page, string sortExpression, bool?accending, IQueryable <Q> repo) where T : ListViewModel where U : ViewModelFilterBase where Q : Entity { return(CreateModel <T, U, Q>(filterKey, settingsKey, page, sortExpression, accending, repo, FilterSettingsVirtual)); }
/// <summary> /// Methoda zwraca filtr /// </summary> /// <typeparam name="T">Typ filtru</typeparam> /// <param name="filterKey">Klucz do zapisanego filtra w sesji</param> /// <param name="settingsKey">Klucz do zapisanych stawień w sesji</param> /// <param name="page">Strona</param> /// <param name="sortExpression">Wyrażenie sortowania</param> /// <param name="accending">rosnące?</param> /// <returns></returns> private T PageSettingsOrder <T>(FilterSettingsKey filterKey, PageSettingsKey settingsKey, ref int?page, ref string sortExpression, ref bool?accending) { var filter = default(T); // Pobranie aktualnych filtrów z sesji if (Session != null) { filter = (T)Session[filterKey.ToString()]; } if (filter == null) { filter = Activator.CreateInstance <T>(); } if (Session != null) { Session[filterKey.ToString()] = filter; PageSettings.RemoveFromSessionExcept(settingsKey); FilterSettings.RemoveFromSessionExcept(filterKey); var pageSettings = PageSettings.GetFromSession(settingsKey); if (pageSettings != null) { if (!page.HasValue) { page = pageSettings.Page; } if (!accending.HasValue) { accending = pageSettings.Accending; } if (string.IsNullOrEmpty(sortExpression)) { sortExpression = pageSettings.SortExpression; } } else { pageSettings = new PageSettings(); } pageSettings.Page = page ?? 1; pageSettings.Accending = !accending.HasValue || accending.Value; pageSettings.SortExpression = string.IsNullOrEmpty(sortExpression) ? "Id" : sortExpression; Session[settingsKey.ToString()] = pageSettings; } return(filter); }
/// <summary> /// Usuwana obiekty filtrów z sesji za wyjątkiem zadanego klucza /// </summary> /// <param name="exception">Wyjątek - klucz, który nie zostanie usunięty z sesji</param> public static void RemoveFromSessionExcept(FilterSettingsKey exception) { if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Session != null) { string[] namesToRemove = Enum.GetNames(typeof(FilterSettingsKey)).Except(new string[] { exception.ToString() }).ToArray(); foreach (string name in namesToRemove) { if (System.Web.HttpContext.Current.Session[name] != null) { System.Web.HttpContext.Current.Session[name] = null; System.Web.HttpContext.Current.Session.Remove(name); } } } }