Tôi có các bộ điều khiển để tính toán phân trang. Nhưng tôi có 13 bộ điều khiển khác nhau. Vì vậy, để viết rằng tính toán trong mỗi bộ điều khiển sẽ được tẻ nhạt.viết phương pháp chung để phân trang
này là phương pháp comoplete:
[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));
}
Nhưng đây là một phần của tính:
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;
}
Vì vậy, tôi cố gắng xây dựng một phương pháp helper như thế này:
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;
}
Nhưng tôi gặp lỗi này:
The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)
Cảm ơn bạn
Bạn nhận được lỗi trên 'IEnumerable> '? Đối số của một mẫu không thể là một đối tượng, nó phải là một loại. Nhìn vào dòng này 'IEnumerable inner = item như IEnumerable ; 'Tôi nghĩ rằng bạn muốn khởi tạo' pp' như một' IEnumerable > ' –
Không có gì để làm với ASP cổ điển. – Paul