【发布时间】:2014-11-05 15:46:55
【问题描述】:
所以基本上我已经在本教程的帮助下完成了所有的排序、过滤和分页,这非常非常方便,因为我对这种材料非常陌生。无论如何,我现在在尝试对一些具有多个主键的表进行排序和过滤时遇到问题。
我创建了 var 应用程序和 var 数据库,但我认为如果我有办法将它们结合起来,我的分页就不会有问题。因为我的返回视图会更简洁。
public ActionResult Index(string sortOrder, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.IDSortParm = String.IsNullOrEmpty(sortOrder) ? "AppID_desc" : "";
ViewBag.NameSortParm = sortOrder == "Name" ? "AppName_desc" : "Name";
ViewBag.ID2SortParm = sortOrder == "ID" ? "DatabaseID_desc" : "ID";
ViewBag.Name2SortParm = sortOrder == "Name2" ? "DatabaseName_desc" : "Name2";
if (Request.HttpMethod != "GET")
{
page = 1;
}
ViewBag.CurrentFilter = searchString;
var applications = from a in db.Application_
select a;
var databases = from d in db.Database_ //this is what I added
select d;
if (!String.IsNullOrEmpty(searchString))
{
applications = applications.Where(s => s.AppName.ToUpper().Contains(searchString.ToUpper()));
databases = databases.Where(d => d.DatabaseName.ToUpper().Contains(searchString.ToUpper())); //also what I added
}
switch (sortOrder)
{
case "AppID_desc":
applications = applications.OrderByDescending(a => a.AppID);
break;
case "Name":
applications = applications.OrderBy(a => a.AppName);
break;
case "AppName_desc":
applications = applications.OrderByDescending(a => a.AppName);
break;
case "Name2":
databases = databases.OrderBy(d=> d.DatabaseName);
break;
case "DatabaseName_desc":
databases = databases.OrderByDescending(d => d.DatabaseName);
break;
default:
applications = applications.OrderBy(a => a.AppID);
break;
}
int pageSize = 10;
int pageNumber = (page ?? 1);
return View(applications.ToPagedList(pageNumber, pageSize));
}
我添加了 var 数据库,因为我需要在 database_ 表和应用程序表中搜索值。
索引:
@using (Html.BeginForm())
{
<p>
Search Name: @Html.TextBox("Search_Data", ViewBag.FilterValue as string)
<input type="submit" value="Find" />
</p>
}
<table class="table">
<tr>
<th>
@Html.ActionLink("AppID", "Index", new { sortOrder = ViewBag.IDSortParm })
</th>
<th>
@Html.ActionLink("ApplicationName", "Index", new { sortOrder = ViewBag.NameSortParm })
</th>
<th>
@Html.ActionLink("DatabaseID", "Index", new { sortOrder = ViewBag.ADSortParm })
</th>
<th>
@Html.ActionLink("DatabaseName", "Index", new { sortOrder = ViewBag.Name2SortParm })
</th>
我相信我的索引有问题,但显然我总体上很无能,所以无论您能提供什么帮助,我们都将不胜感激。
谢谢!!
编辑: 为了更清楚,另外我找到了一种更好地解释自己的方法。
【问题讨论】:
-
"我现在在尝试排序和过滤我的一些表时遇到问题" - 问题是什么(它不排序,它不排序有时,只有某些页面排序,它不过滤等)?您的问题目前尚不清楚实际问题是什么(预期行为、当前行为)。
-
具有多个主键的表根本不会排序。
-
据我了解,您正试图在一个网格中同时查看表应用程序和数据库,并能够单击标题对数据进行排序?
-
是的,如果我的胡言乱语难以理解,我很抱歉。这东西真的很难说。
-
请提供表应用程序和数据库的实体定义。
标签: c# asp.net-mvc entity-framework