ASP.NET Core 5 MVC无数据库场景下如何实现可用的搜索栏功能?
1 修改Razor视图添加搜索栏
在原有上传表单下方添加搜索表单,同时修正原有表单的methord拼写错误为method:
<!-- 原有上传表单 --> <form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="Index"> <input type="file" name="fifile" /> <input type="submit" value="Upload" /> <hr /> </form> <!-- 新增搜索表单 --> <form method="get" asp-controller="Home" asp-action="Index"> <input type="text" name="searchKeyword" placeholder="输入文件名搜索" value="@ViewBag.SearchKeyword" /> <input type="submit" value="搜索" /> <hr /> </form> <table class="table"> <tr> <th>File Name</th> </tr> @foreach (var item in FileClass.Filename) { <tr> <td>@item.Name</td> <td><a href="@Url.Action("Download","Home",new { filename=item.Name })">Download</a></td> @if (User.IsInRole("Admin")) { <td><a href="@Url.Action("Delete", "Home", new { filedel = item.Name })">Delete</a></td> } <td><a href="/Home/DocumentViewer/@item.Name">Viewer</a></td> </tr> } </table>
2 修改Home控制器的Index GET方法
新增搜索参数,实现文件筛选逻辑:
public IActionResult Index(string searchKeyword = null) { var displayfc = Path.Combine(_iweb.WebRootPath, "Uploads"); DirectoryInfo di = new DirectoryInfo(displayfc); List<FileInfo> fileinfo = di.GetFiles().ToList(); // 搜索逻辑:关键词不为空时筛选文件名包含关键词的文件 if (!string.IsNullOrEmpty(searchKeyword)) { fileinfo = fileinfo.Where(f => f.Name.Contains(searchKeyword, StringComparison.OrdinalIgnoreCase)).ToList(); } FileClass.Filename = fileinfo; ViewBag.SearchKeyword = searchKeyword; // 回显搜索关键词到视图 return View(); }
3 路由配置说明
无需额外配置特殊路由,使用ASP.NET Core默认路由即可满足需求。
如果是.NET 6+版本,Program.cs中的默认路由配置如下:
var builder = WebApplication.CreateBuilder(args); // 省略其他服务注册代码 builder.Services.AddControllersWithViews(); var app = builder.Build(); // 省略其他中间件配置代码 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
如果需要更友好的搜索路由(URL格式为/Home/Index/关键词),可以给Index GET方法加特性路由:
[HttpGet("Home/Index/{searchKeyword?}")] public IActionResult Index(string searchKeyword = null) { // 原有逻辑不变 }
内容的提问来源于stack exchange,提问作者Panait Rares Horia
相关产品推荐
相关产品推荐

