ASP.NET Core Razor Pages首页表单值无法传递至后端求助
ASP.NET Core Razor Pages 表单绑定失效解决方案
问题根源
你的代码存在两个核心问题导致表单值无法传递:
- 输入框同时手动设置了
name="searchText"和asp-for="gameViewModel.Name",asp-for会自动生成符合模型绑定规则的name属性(即gameViewModel.Name),但手动设置的name会覆盖这个值,导致后端无法匹配到GameViewModel.Name属性。 IndexModel中缺少Post请求处理方法,Razor Pages需要明确的OnPost/OnPostAsync方法来触发模型绑定流程。
修正步骤
- 修改前端表单代码:移除input标签的
name="searchText"属性,让asp-for自动生成正确的name:
<form method="post" autocomplete="on"> <label class="offscreen" for="searchText">Enter a game</label> <input type="text" id="searchText" class="searchText" list="games" asp-for="gameViewModel.Name"/> </form>
- 补充后端Post处理方法:在
IndexModel中添加Post请求处理方法,确保模型绑定能触发:
public class IndexModel : PageModel { private readonly ILogger<IndexModel> _logger; public IndexModel(ILogger<IndexModel> logger) { _logger = logger; } [BindProperty] public GameViewModel gameViewModel { get; set; } // 添加Post处理方法 public IActionResult OnPost() { // 此处可访问gameViewModel.Name的表单值 if (!string.IsNullOrEmpty(gameViewModel.Name)) { // 编写你的业务处理逻辑 } return Page(); } }
额外检查点
- 确认
GameViewModel的Name属性保持可读写状态(你的代码已满足)。 - 表单
method必须设置为post(你的代码已配置)。 - 页面需包含防伪令牌:Razor Pages默认自动添加,若手动编写表单,可补充
@Html.AntiForgeryToken()确保请求合法性。
内容的提问来源于stack exchange,提问作者Bradreslam
相关产品推荐
相关产品推荐

