使用多个过滤器进行过滤MVC
本文关键字:过滤 MVC 过滤器 | 更新日期: 2023-09-27 18:06:45
报表页面
我正在构建一个报表页面,它有多个过滤器,当用户选择0到all时,它显示所有列,并过滤所有数据。当选择多个过滤器时,我不确定如何连接过滤器。示例代码如下,我只发布了相关代码,因为它很长,控制器是从模型中拉出来的,这就是"IssueViewModel"的来源。我发现过滤器/搜索使用多字段- ASP。. NET MVC,但它需要我改变太多的代码,因为变量的问题,我已经写了。谢谢你!
控制器:
public ActionResult Reports(string JIssue, string Status)
{
string EX = "EX";
var Issues = db.Data.Select(i => new IssueViewModel { });
if (JIssue == "2"){
Issues = db.Data.Where(d => d.Column.Contains(EX)).Select(i => new IssueViewModel
{
Name = i.Name,
Description = i.Description,
Key = i.Key,
LastUpdate = i.LastUpdate,
ID = i.ID,
IssueType = i.IssueType,
ProgrammingStatus = i.ProgrammingStatus
}); }
if (Status == "2"){
Issues = db.Data.Where(d => d.Column2.Contains(1)).Select(i => new IssueViewModel
{
Name = i.Name,
Description = i.Description,
Key = i.Key,
LastUpdate = i.LastUpdate,
ID = i.ID,
IssueType = i.IssueType,
ProgrammingStatus = i.ProgrammingStatus
}); }
ViewBag.Issues = Issues.ToList();
return View();
视图:
@Html.DropDownList("JIssue", new List<SelectListItem> {
new SelectListItem { Text = "All", Value = "1", Selected = true},
new SelectListItem { Text = "EX", Value = "2"},
new SelectListItem { Text = "EXX", Value = "3"},
new SelectListItem { Text = "EZX", Value = "4"},
new SelectListItem { Text = "ABC", Value = "5"},
new SelectListItem { Text = "BCD", Value = "6"},
new SelectListItem { Text = "CDE", Value = "7"},
}, "Select Project")
我看到了一些可能的改进。
1) JIssue
字符串是您的输入之一。在这个例子中,如果它是2
,那么你在Where
子句中检查EX
。如果您通过Text
而不是Value
搜索,则发送文本。这样就可以排除if语句。(我知道你对所有其他值有更多的if语句。)因此,您的第一个检查将归结为
Issues = db.Data.Where(d => d.Column.Contains(JIssue)).Select(...)
同样可以应用于Status。
2)在检查了每个条件之后,你得到了数据(通过执行Select
)。相反,只有在运行所有Where
子句之后才请求数据。或者,将所有条件包含在一个Where
块中。
所以这将归结为以下内容:
public ActionResult Reports(string JIssue, string Status)
{
var Issues = db.Data
.Where(d => d.Column.Contains(JIssue) &&
d.Column2.Contains(1) &&
/* potential other conditions for other columns*/ )
.Select(i => /* your mapping here */)
.ToList();
ViewBag.Issues = Issues;
return View();
}