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语句,因为我正在搜索表单中创建另一个下拉列表,它会在我的控制器操作中添加一系列条件。。

asp.net mvc-重构我冗长的C#mvc搜索表单

试试这个:

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);
}