Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写分页的通用方法_C#_Asp.net Mvc - Fatal编程技术网

C# 编写分页的通用方法

C# 编写分页的通用方法,c#,asp.net-mvc,C#,Asp.net Mvc,我有控制器,可以计算分页。但我有13个不同的控制器。因此,在每个控制器中编写该计算将是乏味的 这是cocomplete方法: [Route("sort/{SortColumn}/{SortOrder?}", Name = "Sort-Product")] [Route("page/{Page:int}/{SortColumn}/{SortOrder?}", Name = "Paging-Product")] [Route("search/{SearchStrin

我有控制器,可以计算分页。但我有13个不同的控制器。因此,在每个控制器中编写该计算将是乏味的

这是cocomplete方法:

 [Route("sort/{SortColumn}/{SortOrder?}", Name = "Sort-Product")]
        [Route("page/{Page:int}/{SortColumn}/{SortOrder?}", Name = "Paging-Product")]
        [Route("search/{SearchString}")]
        [Route("index")]
        public ActionResult Index(string searchString, string filter, string currentFilter, string sortColumn, string sortOrder, int? page)
        {
            IOrderedQueryable<Product> entities = (IOrderedQueryable<Product>)db.FilteredProducts;

            if (searchString != null) page = 1; else searchString = currentFilter;

            if (filter != null) {
                string[] filters = filter.Split(new char[] { '.' });
                filter = "";

                // filter on form
                if (filters.Length > 0 && !String.IsNullOrEmpty(filters[0])) {
                    FormLibraryEntry formEntry = FormLibraryController.GetFormLibraryEntry(filters[0], StateHelper.GetSchema());

                    if (formEntry != null) {
                        entities = (IOrderedQueryable<Product>)entities.Where(
                            s => s.FormName == formEntry.Id
                        );
                        AddFixedNotification(String.Format(Resources.Entity.Environment.FilteredByFormMessage, formEntry.Name));
                        filter += filters[0];
                    }
                }

                // filter on design template
                if (filters.Length > 1 && !String.IsNullOrEmpty(filters[1])) {
                    var designEntry = DesignTemplateController.GetTemplateLibraryEntry(filters[1], StateHelper.GetSchema());

                    if (designEntry != null) {
                        entities = (IOrderedQueryable<Product>)entities.Where(
                            s => s.TemplateName == designEntry.Id
                        );
                        AddFixedNotification(String.Format(Resources.Entity.Environment.FilteredByDesignTemplateMessage, designEntry.Name));
                        filter += "." + filters[1];
                    }

                }
            }

            if (!String.IsNullOrEmpty(searchString)) {
                entities = (IOrderedQueryable<Product>)entities.Where(
                        s => s.Name.ToUpper().Contains(searchString.ToUpper())
                        || (!String.IsNullOrEmpty(s.FormName) && s.FormName.ToUpper().Contains(searchString.ToUpper()))
                        || (!String.IsNullOrEmpty(s.UrlName) && s.UrlName.ToUpper().Contains(searchString.ToUpper()))
                );
                AddFixedNotification(String.Format(Resources.Entity.Environment.FilteredBySearchTermMessage, searchString));
            }

            switch (sortColumn) {
                case "id":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.Id) : entities.OrderBy(s => s.Id);
                    break;
                case "name":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.Name) : entities.OrderBy(s => s.Name);
                    break;
                case "enabled":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.IsEnabled) : entities.OrderBy(s => s.IsEnabled);
                    break;
                case "formname":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.FormName) : entities.OrderBy(s => s.FormName);
                    break;
                case "design":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.TemplateName) : entities.OrderBy(s => s.TemplateName);
                    break;
                case "urlname":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.UrlName) : entities.OrderBy(s => s.UrlName);
                    break;
                case "forms":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.SubmittedForms.Count()) : entities.OrderBy(s => s.SubmittedForms.Count());
                    break;
                case "modified":
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.ModificationDate) : entities.OrderBy(s => s.ModificationDate);
                    break;
                default:
                    sortColumn = "name";
                    sortOrder = "";
                    entities = (sortOrder == "desc") ? entities.OrderByDescending(s => s.Name) : entities.OrderBy(s => s.Name);
                    break;
            }

            ViewBag.SortColumn = sortColumn;
            ViewBag.SortOrder = sortOrder == "desc" ? "desc" : "";
            ViewBag.SearchString = searchString;
            ViewBag.Filter = filter;

            int pageSize = StateHelper.GetPageSize();
            int pageNumber = StateHelper.HasPageSizeChanged ? 1 : (page ?? 1);


            object selectionProduct = ModelHelper.GetSelectedModelId("Product");
            if (selectionProduct != null) {
                IEnumerable<IEnumerable<Product>> pp = entities.Partition(pageSize);
                int calculatedPage = 0;
                bool found = false;
                foreach (var item in pp) {
                    calculatedPage++;
                    IEnumerable<Product> inner = item as IEnumerable<Product>;
                    foreach (var product in inner) {
                        if (product.Id == (int)selectionProduct) {
                            found = true;
                            ViewBag.selectedRowProduct = product.Id;
                            break;
                        }
                    }
                    if (found)
                        break;
                }
                if (found)
                    pageNumber = calculatedPage;

            }

            return View(entities.ToPagedList(pageNumber, pageSize));
        }
谢谢

试试:

public static bool FindPage<T>(object modelId, IEnumerable<T> entities, int pageSize, int calculatedPage, int? id)
    {
        if (modelId != null) {
            calculatedPage = 0;
            IEnumerable<IEnumerable<T>> pp = entities.Partition(pageSize);
            int page = 0;
            bool found = false;
            foreach (var item in pp) {
                page++;
                IEnumerable<T> inner = item as IEnumerable<T>;
                foreach (var product in inner) {
                    if (id == (int)modelId) {
                        found = true;
                        break;
                    }
                }
                if (found)
                    break;
            }
            if (found)
                calculatedPage = page;
            else
                calculatedPage = 0;

            return found;
        }
        return false;
    }
publicstaticboolfindpage(对象模型id、IEnumerable实体、int pageSize、int calculatedPage、int?id)
{
if(modelId!=null){
计算页面=0;
IEnumerable pp=entities.Partition(页面大小);
int page=0;
bool-found=false;
foreach(pp中的var项目){
page++;
IEnumerable-inner=项为IEnumerable;
foreach(内部的var乘积){
if(id==(int)modelId){
发现=真;
打破
}
}
如果(找到)
打破
}
如果(找到)
计算页面=第页;
其他的
计算页面=0;
发现退货;
}
返回false;
}

您是否在
IEnumerable
上看到错误?模板的参数不能是对象,它必须是类型。将此行
IEnumerable inner=项视为IEnumerable
我认为您想将
pp
实例化为
IEnumerable
与经典ASP无关。谢谢。但现在的问题是:IEnumerable pp=entities.Partition(pageSize);分区不可用recognisable@hallohallo分区不是IEnumerable的方法,也不是IEnumerable的扩展
 public static bool FindPage(Type T, object modelId, IEnumerable<Type> entities, int pageSize, int calculatedPage, int? id)
        {
            if (modelId != null) {
                calculatedPage = 0;
                IEnumerable<IEnumerable<T>> pp = entities.Partition(pageSize);
                int page = 0;
                bool found = false;
                foreach (var item in pp) {
                    page++;
                    IEnumerable<Type> inner = item as IEnumerable<Type>;
                    foreach (var product in inner) {
                        if (id == (int)modelId) {
                            found = true;
                            break;
                        }
                    }
                    if (found)
                        break;
                }
                if (found)
                    calculatedPage = page;
                else
                    calculatedPage = 0;

                return found;
            }
            return false;
        }
The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?) 
public static bool FindPage<T>(object modelId, IEnumerable<T> entities, int pageSize, int calculatedPage, int? id)
    {
        if (modelId != null) {
            calculatedPage = 0;
            IEnumerable<IEnumerable<T>> pp = entities.Partition(pageSize);
            int page = 0;
            bool found = false;
            foreach (var item in pp) {
                page++;
                IEnumerable<T> inner = item as IEnumerable<T>;
                foreach (var product in inner) {
                    if (id == (int)modelId) {
                        found = true;
                        break;
                    }
                }
                if (found)
                    break;
            }
            if (found)
                calculatedPage = page;
            else
                calculatedPage = 0;

            return found;
        }
        return false;
    }