ASP.NET Razor Pages路由调整:将URL改为/Home/Search?input格式
解决方案
要把URL格式从Home/Search/Input改为Home/Search?search=Input,只需修改以下几个部分:
1. 修改搜索页的路由定义
打开Search.cshtml,移除路由参数声明,恢复基础路由:
@page @model SearchModel @using DB @{ ViewData["Title"] = "Test"; } <table class="table"> @foreach (var customer in Model.Input) { <tr> <td>@customer.Search</td> </tr> } </table>
原代码中的@page "{search}"会把search解析为URL路径的一部分,移除后页面将默认通过查询参数接收值。
2. 优化表单提交方式(推荐)
直接将首页表单改为GET请求,省去后台跳转步骤,提交时自动生成查询参数格式的URL:
<form method="get" asp-page="Search" id="form"> <div class="d-flex text-center" id="search"> <div class="container"> <div class="card"> <div class="card-body p-4"> <div class="row"> <div class="col-12"> <div class="input-group"> <div class="form-outline flex-fill"> <input type="search" id="search" class="form-control form-control-lg" name="search"/> <label class="form-label" style="font-size: 14px;vertical-align: middle" for="search">Enter Input...</label> </div> <button class="btn btn-success" id="submit"><i class="fas fa-search"></i></button> </div> </div> </div> </div> </div> </div> </div> </form>
这里把method="post"改为method="get",并通过asp-page="Search"直接指定跳转目标,提交后会直接生成Home/Search?search=用户输入内容的URL。
3. (可选)保留POST跳转的调整方案
如果坚持使用POST提交,修改Home.cshtml.cs的跳转逻辑即可,由于已修改搜索页路由,参数会自动转为查询参数:
public IActionResult OnPost() { var search = Request.Form["search"]; return RedirectToPage("Search", new { search = search }); }
验证接收逻辑
Search.cshtml.cs的OnGet方法无需修改,它已经能正确接收查询参数search:
public void OnGet(string search) { this.Input = _context.database.Where(x => x.Search == search).ToList(); }
内容的提问来源于stack exchange,提问作者Kazq
相关产品推荐
相关产品推荐

