Asp .NET MVC使用ajax / json排序多标准

时间:2016-01-26 16:13:27

标签: asp.net-mvc sorting asynchronous controller

我的目标是在我的控制器中为我的活动会话视图构建一个多标准系统。我有三种过滤方式:按关键字,按开始/结束日期和几个活动(登录/注销,锁定/锁定...)。用户可以使用他们中的任何一个,一个或全部。

有这篇帖子:How to structure controller to sort multiple criteria asp.net mvc,这与我的需求非常接近,但它在2010年得到了解答,你能否告诉我它是否是最新的?有更简单的解决方案吗?

目前我已经用ajax / json / js分别建立了每个标准。它正在工作,但我无法累积它们。

public ActionResult FilterByActivity(int chx)
{
    string returnpartial = "";
    var auditActivity = db.AuditActivity.Include(a => a.Pc).Include(a => a.Activity).Include(a => a.Users);
    switch (chx)
    {
        case 1:
            auditActivity = auditActivity.Where(a => a.ActivityId==1 || a.ActivityId == 2);
            returnpartial = "Indexactivityuser";
            break;
        case 2:
            auditActivity = auditActivity.Where(a => a.ActivityId==3 || a.ActivityId == 4);
            returnpartial = "Indexactivityuser";
            break;
        case 3:
            auditActivity = auditActivity.Where(a => a.ActivityId==5 || a.ActivityId == 6);
            returnpartial = "Indexactivityuser";
            break;
    }
    return PartialView(returnpartial, auditActivity.ToList());
}

public ActionResult FilterByDate(DateFilter dateFilter)
{
    DateTime endperiod = dateFilter.EndDate.AddDays(1).AddTicks(-1);
    string returnpartial = "";
    var auditActivity = db.AuditActivity.Include(a => a.Pc).Include(a => a.Activity).Include(a => a.Users);
    auditActivity = auditActivity.Where(a => a.Date > dateFilter.StartDate && a.Date < endperiod).OrderBy(a => a.Date);
    returnpartial = "Indexactivityuser";
    return PartialView(returnpartial, auditActivity.ToList());
}

在控制器中

npm r -g watchman 
brew update && brew upgrade
brew install watchman

1 个答案:

答案 0 :(得分:1)

要将它们组合在一起,您需要将它们作为单个请求提交。

如下所示:

public class SearchDefinition
{
     DateFilter dateFilter {get;set;}
     int activityType { get;set;}  //this is chx
}

然后按如下方式修改您的控制器签名:

public ActionResult FilterActivities(SearchDefinition searchDefn)

在实施控制器时,您已经掌握了所有已有的概念,所以我只是在这里举例说明:

returnpartial = "Indexactivityuser";
var auditActivity = db.AuditActivity.Include(a => a.Pc).Include(a => a.Activity).Include(a => a.Users);
switch (searchDefn.activityType) //activitytype will be zero if not set in javascript
{
    case 1:
        auditActivity = auditActivity.Where(a => a.ActivityId==1 || a.ActivityId == 2);
        break;
    case 2:
        auditActivity = auditActivity.Where(a => a.ActivityId==3 || a.ActivityId == 4);
        break;
    case 3:
        auditActivity = auditActivity.Where(a => a.ActivityId==5 || a.ActivityId == 6);
        break;
}

if(searchDefn.dateFilter!=null){  // datefilter will be null if not set by javascript

    DateTime endperiod = dateFilter.EndDate.AddDays(1).AddTicks(-1);

    auditActivity = auditActivity.Where(a => a.Date > dateFilter.StartDate && a.Date < endperiod).OrderBy(a => a.Date);
}

再次,您拥有javascript中的所有概念,只需将所有数据收集在一个按钮后面并在单个ajax请求中提交