我正在使用JqueryUI选项卡创建搜索表单。该选项卡包含Ajax搜索表单和显示搜索结果的表格。我还使用了IpagedList来遍历结果表。控制器的索引操作包含Linq查询并控制要呈现的视图。以下是索引操作的代码:
public ActionResult Index(ConsultantSearch model, int page = 1)
{
if (!String.IsNullOrEmpty(model.SearchButton) ||!String.IsNullOrEmpty(model.CancelButton))
{
var consultants = from con in db.Consultants
where (model.ConsultantName == null || con.ConsultantName.Contains(model.ConsultantName)) && (model.CompanyID == null || con.CompanyID == model.CompanyID)
&& (model.ClientID == null || con.ClientID == model.ClientID) && (model.VendorID == null || con.VendorID == model.VendorID) && (model.RecruiterID == null || con.RecruiterID == model.RecruiterID)
&& (model.Class == null || con.Class == model.Class) && (model.W2_1099 == null || con.W2_1099 == model.W2_1099) && (model.IsActive == null || con.IsActive == model.IsActive)
&& (model.StartDate == null || model.EndDate == null || (con.StartDate >= model.StartDate && con.EndDate <= model.EndDate))&&( model.StartDate == null || con.StartDate >= model.StartDate) && (model.EndDate == null|| con.EndDate <= model.EndDate)
select con;
consultants = consultants.Include(c => c.Client).Include(c => c.Company).Include(c => c.Recruiter).Include(c => c.SalesPerson).Include(c => c.Vendor);
return PartialView("_ConsultantList",consultants.ToList().ToPagedList(page,RecordsPerPage));
}
else
{
var consultants = db.Consultants.Include(c => c.Client).Include(c => c.Company).Include(c => c.Recruiter).Include(c => c.SalesPerson).Include(c => c.Vendor);
return PartialView(consultants.ToList().ToPagedList(page, RecordsPerPage));
}
}
当用户首次加载页面时,执行其他部分会生成部分视图索引,该索引显示表单和显示当前数据库中所有顾问的表格。但是,单击搜索按钮或取消按钮时,if条件变为true,并呈现部分视图Consultant列表。它仅更新页面的结果表部分。
现在我的问题是我想添加一个条件,当使用分页控件时,If条件变为true并且只显示结果表中的下一页顾问记录。我可以在If条件中使用isAjaxRequest()。但问题是当JqueryUI选项卡(包含from和table)将加载If条件因为isAjaxRequest()而变为true,并且只会呈现我不想要的Consultant List视图。
所以基本上我想区分两个ajax请求。如果ajax请求是用于选项卡那么else条件应该工作,如果它是来自分页那么if条件应该工作。 有任何想法吗...?
答案 0 :(得分:0)
重新设计控制器操作方法。不是在控制器中放置条件逻辑,而是为需要满足的每个条件添加一个操作方法,并在视图/标记中放置一个请求逻辑。
判断您是应该加载顾问网格还是某些搜索结果的分页视图的最佳方法是,view / JavaScript是否对相应的操作方法执行ajax请求。