C# 如何修改此搜索函数以接受多个搜索字符串
我需要这个代码的帮助 型号:C# 如何修改此搜索函数以接受多个搜索字符串,c#,search,asp.net-core,pagination,asp.net-core-mvc,C#,Search,Asp.net Core,Pagination,Asp.net Core Mvc,我需要这个代码的帮助 型号: public class SearchList { public string Name { get; set; } public string className { get; set; } } 控制器: [Authorize] public IActionResult Search(string sortOrder, string currentFilter, string name, int? page, string clas
public class SearchList
{
public string Name { get; set; }
public string className { get; set; }
}
控制器:
[Authorize]
public IActionResult Search(string sortOrder, string currentFilter, string name, int? page, string className)
{
ViewData["CurrentSort"] = sortOrder;
ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewData["DateSortParm"] = sortOrder == "Date" ? "date_desc" : "Date";
var searchList = FetchList()
if (name != null)
{
page = 1;
}
else
{
name = currentFilter;
}
ViewData["CurrentFilter"] = name;
if (!String.IsNullOrEmpty(name))
{
searchList = searchList.Where(m => m.Name.Contains(name)).ToList();
}
switch (sortOrder)
{
case "name_desc":
searchList = searchList.OrderByDescending(s => s.Name).ToList();
break;
default:
break;
}
int pageSize = 3;
return View(PaginatedList<SearchList>.Create(searchList, page ?? 1, pageSize));
}
public IList<SearchList> FetchList()
{
var searchList = new List<SearchList>();
searchList.Add(new SearchList
{
Name = "Andy",
className = "Class Alpha",
});
searchList.Add(new SearchList
{
Name = "Nando",
className = "Class Beta",
});
searchList.Add(new SearchList
{
Name = "Anrya",
className = "Class Alpha",
});
return searchList;
}
[授权]
公共IActionResult搜索(字符串排序器、字符串currentFilter、字符串名称、int?页、字符串类名称)
{
ViewData[“CurrentSort”]=排序器;
ViewData[“NameSortParm”]=String.IsNullOrEmpty(排序器)?“name_desc”:“;
ViewData[“DateSortParam”]=排序器==“日期”?“日期描述”:“日期”;
var searchList=FetchList()
if(name!=null)
{
page=1;
}
其他的
{
名称=当前过滤器;
}
ViewData[“CurrentFilter”]=名称;
如果(!String.IsNullOrEmpty(名称))
{
searchList=searchList.Where(m=>m.Name.Contains(Name)).ToList();
}
开关(分拣机)
{
案例“名称描述”:
searchList=searchList.OrderByDescending(s=>s.Name.ToList();
打破
违约:
打破
}
int pageSize=3;
返回视图(分页列表创建(搜索列表,第1页,页面大小));
}
公共IList FetchList()
{
var searchList=新列表();
添加(新的搜索列表)
{
Name=“安迪”,
className=“Class Alpha”,
});
添加(新的搜索列表)
{
Name=“Nando”,
className=“Class Beta”,
});
添加(新的搜索列表)
{
Name=“Anrya”,
className=“Class Alpha”,
});
返回搜索列表;
}
我的看法
<form asp-action="Search">
<div>
<table id="t1" class="table table-bordered table-condensed"> <tr>
<th>
<b>Details</b>
</th>
</tr>
<tr>
<td >
Name
</td>
<td>
<input class="form-control" type="text" name="name" value="@ViewData["currentFilter"]" />
</td>
</tr>
<tr>
<td>
Class Name
</td>
<td>
<input class="form-control" style="width: 200px" type="text" name="classname">
</td>
</tr>
</table>
<div class="form-group">
<input type="submit" value="Search" class="btn btn-default"/>
</div>
</div>
</form>
}
</div>
</div>
<form>
<div>
<table>
<tr>
<td colspan="6" class="tableheader">
Listing</b>
</td>
</tr>
<tr style="font-weight: bold; background:#efefef">
<td>
@Html.ActionLink("Name", "Search", new { sortOrder = ViewBag.NameSortParm })
</td>
<td>
Class Name
</td>
</tr>
@{
foreach (var m in Model.AsEnumerable())
{
<tr class="oddeventable">
<td>
@Html.ActionLink(@m.Name, "TestStudent", "Student", new { Name = m.Name })
</td>
<td>
@m.ClassName
</td>
</tr>
}
}
</table>
</div>
</form>
@{
var prevDisabled = !Model.HasPreviousPage ? "disabled" : "";
var nextDisabled = !Model.HasNextPage ? "disabled" : "";
}
<a asp-action="Search"
asp-route-sortOrder="@ViewData["CurrentSort"]"
asp-route-page="@(Model.PageIndex - 1)"
asp-route-currentFilter="@ViewData["CurrentFilter"]"
class="btn btn-default @prevDisabled">
Previous
</a>
<a asp-action="Search"
asp-route-sortOrder="@ViewData["CurrentSort"]"
asp-route-page="@(Model.PageIndex + 1)"
asp-route-currentFilter="@ViewData["CurrentFilter"]"
class="btn btn-default @nextDisabled">
Next
</a>
细节
名称
类名
}
表册
@ActionLink(“名称”,“搜索”,新{sortOrder=ViewBag.NameSortParm})
类名
@{
foreach(Model.AsEnumerable()中的var m)
{
@ActionLink(@m.Name,“TestStudent”,“Student”,new{Name=m.Name})
@m、 类名
}
}
@{
var prevDisabled=!Model.HasPreviousPage?“disabled”:“”;
var nextisabled=!Model.HasNextPage?“已禁用”:“;
}
以前的
下一个
当前的视图和控制器只能收到一个搜索字符串“Name”,我想做的是它也可以搜索className,因此基本上控制器将检索名称和className并对其进行过滤,创建新的搜索列表并发回视图。实际上我很迷茫,因为'currentFilter'本身就是'name',所以我不知道如何调整它,使筛选器可以接受两个搜索字符串,以便稍后在视图中,我可以在使用currentFilter时单击“Next”页或排序。看起来您已经将className作为参数接受。我将删除currentFilter参数并添加/更改您的筛选:
if (name != null)
{
page = 1;
}
else
{
name = (string)ViewData["CurrentFilterName"];
}
ViewData["CurrentFilterName"] = name;
if (!String.IsNullOrEmpty(name))
searchList = searchList.Where(m => m.Name.Contains(name)).ToList();
if (className == null)
className = (string)ViewData["CurrentFilterClassName"];
ViewData["CurrentFilterClassName"] = className;
if (!String.IsNullOrEmpty(className))
searchList = searchList.Where(m => m.className.Contains(className)).ToList();
同时更改您的输入,使正确的ViewData项默认值。注意,您当前没有设置className的值
并从下一个/上一个文件中删除:
asp-route-currentFilter="@ViewData["CurrentFilter"]"
但是,您可以将方法改为接受currentFilterName和currentFilterClassName,但由于您仍在访问ViewData,因此似乎没有必要这样做。谢谢您的回答,在视图端如何?我在视图中有下一页和上一页代码,我是否必须修改它接受两个搜索字符串?感谢修改和否添加两个字符串,我已经更新了答案史蒂夫,非常感谢你的帮助。它起作用了。但是,如果我插入类名字符串并将名称留空。第一个页面没有被过滤,但当我点击第二个页面时,它会返回到未过滤的数据。你知道为什么吗?不知道。可能viewdata是单向的,所以请尝试将asp route currentFilterName和asp route currentFilterClassName放入next和prev按钮中,并将它们作为参数添加到方法中。