当在下拉菜单中选择多个条目时,会出现多选下拉菜单搜索字符串结果



我用名称构建了一个下拉菜单,作为应用于项目表的过滤器。我希望能够从下拉列表中选择多个条目,并将它们作为过滤器应用。单条目过滤器工作正常,但多选搜索过滤器不返回任何项目记录。当在下拉菜单中未选择任何内容时,也不会显示任何项目。当搜索筛选器为空时,我如何修改搜索参数结果以显示所有项目,并显示分配给下拉菜单中选择的多个人的项目。

我的项目类别:

public class Project
{
public int Id { get; set; }
[Display(Name = "PID")]
public int PID { get; set; }
[Display(Name = "Name")]
public string ProjectName { get; set; }
[Display(Name = "Client")]
public int ClientId { get; set; }
public Client Client { get; set; }
[Display(Name = "Status")]
public string ProjectStatus { get; set; }
[Display(Name = "Forecast Owner")]
public string ForecastOwner { get; set; }
[Display(Name = "DSM")]
public string DSM { get; set; }
public ICollection<ProjectComment> ProjectComments { get; set; }

我的索引.cshtml.cs:

[BindProperty]
public List<ClientVM> ClientVMList { get; set; }
//added for filter - start
public string CurrentFilter { get; set; }
//added for filter - end
//added for filter - string searchString
public async Task<IActionResult> OnGet(string searchString)
{
//added for filter - start
CurrentFilter = searchString;
//added for filter - end
var clientlist = (await _context.Client
.Include(cc => cc.ClientComments).ToListAsync());
var projectlist = (await _context.Project
.Include(pc => pc.ProjectComments)
//added for filter - start
.Where(s => s.DSM == (searchString))
//added for filter - end 
.ToListAsync());
ClientVMList = new List<ClientVM>();
foreach (var item in clientlist)
{
ClientVM clientVM = new ClientVM()
{
Projectlist = new List<ProjectVM>(),
};
clientVM.ClientName = item.ClientName;
clientVM.ClientId = item.Id;
if (item.ClientComments != null && item.ClientComments.Any())
{
clientVM.ClientStatusComment = item.ClientComments.OrderByDescending(cc => cc.LastUpdateDate).First().ClientStatusComment;
clientVM.ClientRAG = item.ClientComments.OrderByDescending(cc => cc.LastUpdateDate).First().ClientRAG;
clientVM.LastUpdateDate = item.ClientComments.OrderByDescending(cc => cc.LastUpdateDate).First().LastUpdateDate;
clientVM.ClientStatusCommentId = item.ClientComments.OrderByDescending(cc => cc.LastUpdateDate).First().Id;
}
else
{
clientVM.ClientStatusComment = "No Status Comment";
}
foreach (var projectItem in projectlist)
{
ProjectVM projectVM = new ProjectVM
{
ClientId = projectItem.ClientId,
ProjectId = projectItem.Id,
ProjectPID = projectItem.PID,
ProjectName = projectItem.ProjectName,
ProjectStatusName = projectItem.ProjectStatus,
ForecastOwnerLongName = projectItem.ForecastOwner,
DSMLongName = projectItem.DSM,
};
if (projectItem.ProjectComments != null && projectItem.ProjectComments.Any())
{
projectVM.ProjectStatusComment = projectItem.ProjectComments.OrderByDescending(pc => pc.LastUpdateDate).First().ProjectStatusComment;
projectVM.RAGStatusName = projectItem.ProjectComments.OrderByDescending(pc => pc.LastUpdateDate).First().ProjectRAG;
projectVM.LastUpdateDate = projectItem.ProjectComments.OrderByDescending(pc => pc.LastUpdateDate).First().LastUpdateDate;
projectVM.ProjectStatusCommentId = projectItem.ProjectComments.OrderByDescending(pc => pc.LastUpdateDate).First().Id;
}
else
{
projectVM.ProjectStatusComment = "No Status Comment";
}
clientVM.Projectlist.Add(projectVM);
}
ClientVMList.Add(clientVM);
}
return Page();

我的Index.chtml:中的表单标记

<form asp-page="./Index" method="get">
<div class="dropdown">
<div class="input-group mb-3">
<div class="input-group-prepend">
<label class="input-group-text" for="inputGroupSelect01">DSM</label>
</div>
<select class="custom-select" id="inputGroupSelect01" multiple="multiple" name="SearchString" value="@Model.CurrentFilter">
<option selected>Choose a DSM...</option>
<option value="Anna">Anna</option>
<option value="Bernard">Bernard</option>
<option value="Carlo">Carlo</option>
</select>
</div>
<input type="submit" value="Search" class="btn btn-primary" /> |
<a asp-page="./CommentGroupings/Index">Back to full List</a>
</p>
</div>
</form>

URL中的搜索字符串结果:

https://localhost:44358/Lists?SearchString=Anna&SearchString=Bernard&SearchString=Carlo

选择一个字符串:

https://localhost:44358/Lists?SearchString=Anna

我想在没有选择任何内容时显示所有记录,在选择多个名称时显示分配给人员的所有记录。我知道这个问题与我在Index.chtml.cs文件中设置搜索字符串的方式有关,但我还没有找到修改它的方法,以便我的搜索能够完全工作。

我指的是:

.Where(s => s.DSM == (searchString))
CurrentFilter = searchString;

任何帮助都将不胜感激。

URL中的搜索字符串结果:

https://localhost:44358/Lists?SearchString=Anna&SearchString=Bernard&SearchString=Carlo

您需要使用List<string> searchString接受所有具有相同名称SearchString的选定值,然后添加您对searchString的判断,例如:

public async Task<IActionResult> OnGet(List<string> searchString)
{
CurrentFilter = searchString;
//condition to show all data
if (searchString.Count == 0 || searchString[0] == "Choose a DSM...")
{
var projectlist = await _context.Project.ToListAsync();
}
//condition to show filtered data
else
{
var projectlist = await _context.Project
.Include(pc => pc.ProjectComments)                
.Where(s => searchString.Contains(s.DSM))               
.ToListAsync();
}
//other logic
}

最新更新