Razor Page无法获取输入值,asp-route-word参数传递问题求助
问题解决方法
核心问题分析
你的代码存在两个关键问题导致word参数始终为null:
- 输入框缺少
name属性,ASP.NET MVC的模型绑定依赖表单元素的name来匹配控制器参数 - 错误使用
asp-route-word属性,它用于传递路由参数,而这里需要通过表单查询字符串传递参数
修正后的表单代码
移除asp-route-word,给输入框添加name="word":
<form class="d-flex" method="get"> <input class="form-control me-sm-2" type="search" placeholder="Search" id="searchWord" name="word" /> <button class="btn btn-secondary my-2 my-sm-0" type="submit" asp-controller="Word" asp-action="Index"> Rechercher </button> </form>
控制器逻辑修正
另外你的查询逻辑存在反向匹配问题,当前代码是判断输入的word是否以数据库中的w.NewWord开头,不符合常规搜索逻辑,应改为判断数据库中的w.NewWord是否以输入的word开头,同时优化查询性能:
public IActionResult Index(string? word) { IEnumerable<Word> objWordList; if (string.IsNullOrEmpty(word)) { objWordList = _db.Words; } else { // 直接使用EF查询,避免先ToArray()导致全表加载 objWordList = _db.Words.Where(w => w.NewWord.StartsWith(word)); } return View(objWordList); }
补充说明
- 表单使用
get方法时,输入框的name和值会自动拼接成查询字符串(如?word=xxx),控制器的word参数会自动匹配接收 asp-route-word用于在URL路由中添加/Word/Index/xxx格式的路由参数,和当前需求的查询字符串参数用途不同,因此需要移除
内容的提问来源于stack exchange,提问作者mathdx
相关产品推荐
相关产品推荐

