asp.net mvc-重构我冗长的C#mvc搜索表单
本文关键字:C#mvc 搜索 搜索表 表单 net mvc- 重构 asp | 更新日期: 2023-09-27 18:00:22
我有一个MVC操作,它接受来自搜索表单(下拉列表和文本框)的搜索条件,该表单根据搜索条件返回项目列表。但我对结果并不满意,因为代码太长/太冗长。我想重构它。有什么建议可以让我得到同样的结果,但我的代码不会像这样混乱吗?我不需要我的代码的精确副本,我只想要一个更简单的格式来实现同样的结果。知道吗?看看这一团糟。
public PartialViewResult ClientSearch(ClientViewModel data) {
var model=new ClientViewModel();
//get all clients if dropdowns and searchstring is null / nonselected
if ((data.SelectedLocation==null) && (data.SelectedClientStatus==null) && (data.SearchString=="" || data.SearchString==null)) {
model.ClientsCollection=_ClientService.Get(null, null, "ClientsProfile, ClientsMobiles").ToList();
return PartialView("_ClientsResult", model);
}
//get clients based on searchstring if no dropdown is selected but searchstring is not null/blank
else if ((data.SelectedLocation==null) && (data.SelectedClientStatus==null) && !(data.SearchString=="" || data.SearchString==null)) {
model.ClientsCollection=_ClientService.Get(u=> u.FullName.Contains(data.SearchString), null, "ClientsProfile, ClientsMobiles").ToList();
return PartialView("_ClientsResult", model);
}
else if (data.SelectedLocation==null && !(data.SelectedClientStatus==null) && (data.SearchString=="" || data.SearchString==null)) {
model.ClientsCollection=_ClientService.Get(u=> u.StatusID==data.SelectedClientStatus, null, "ClientsProfile, ClientsMobiles").ToList();
return PartialView("_ClientsResult", model);
}
else if (!(data.SelectedLocation==null) && (data.SelectedClientStatus==null) && (data.SearchString=="" || data.SearchString==null)) {
model.ClientsCollection=_ClientService.Get(u=> u.LocationID==data.SelectedLocation, null, "ClientsProfile, ClientsMobiles").ToList();
return PartialView("_ClientsResult", model);
}
else {
model.ClientsCollection=_ClientService.Get(u=> u.LocationID==data.SelectedLocation && u.StatusID==data.SelectedClientStatus && u.FullName.Contains(data.SearchString), null, "ClientsProfile, ClientsMobiles").ToList();
return PartialView("_ClientsResult", model);
}
}
我主要关心的是if-else语句,因为我正在搜索表单中创建另一个下拉列表,它会在我的控制器操作中添加一系列条件。。
试试这个:
public PartialViewResult ClientSearch(ClientViewModel data)
{
var model = new ClientViewModel();
model.ClientsCollection = _ClientService.Get(u => ((data.SearchString == "" || u.FullName.Contains(data.SearchString)) && (data.SelectedClientStatus == null || u.StatusID == data.SelectedClientStatus) && (data.SelectedLocation == null || u.LocationID == data.SelectedLocation)), null, "ClientsProfile, ClientsMobiles").ToList();
return PartialView("_ClientsResult", model);
}