You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Razor Pages中Model Binding提交后属性未正常绑定问题

Razor Pages下拉框提交时值未绑定到模型属性问题修复

问题现象

下拉选择框可正常渲染填充,但提交表单触发POST方法时,模型属性dataIWant未完成绑定更新。

现有代码

视图文件 index.html

<div class="input-field col s12">
   <select name="dataIWant">
       <option value="" disabled selected>Choose data I want...</option>
       @foreach(var t in Model.cTypes)
       {   
           <option value=@t.ToString()>@t.ToString()</option>
       }
   </select>
   <label>Data Selector</label>
</div>

页面模型文件 index.html.cs

[BindProperty]
public string dataIWant { get; set; }

排查&修复方案

按优先级依次排查以下问题:

  • 修复option标签value属性的语法问题
    现有代码中value=@t.ToString()未给属性值加引号,当cTypes中的项包含空格、特殊字符时,浏览器解析value值会出错,导致提交的字段值不符合预期。直接修改为带引号的写法:
    <option value="@t.ToString()">@t.ToString()</option>
    
  • 确认Materialize组件初始化正确
    代码使用了Materialize CSS框架,该框架默认会隐藏原生select标签,生成自定义的下拉DOM结构,如果没有执行初始化逻辑,选中值不会同步回原生select,提交时自然无法携带正确值。在页面脚本中加入初始化代码:
    document.addEventListener('DOMContentLoaded', function() {
        M.FormSelect.init(document.querySelectorAll('select'));
    });
    
  • 检查表单基础配置
    • 确保select标签被<form method="post">标签完整包裹,未在表单范围外的字段不会被提交
    • 确认表单没有遗漏请求验证token,Razor Pages默认开启防伪验证,使用form标签helper会自动生成token,手写原生form标签需要额外加@Html.AntiForgeryToken()
    • 提交前确认用户选中了非禁用的选项:默认的提示选项加了disabled属性,选中该项提交时值为空字符串,不会绑定有效值
  • 检查POST方法逻辑
    确认OnPost方法中没有在模型绑定完成前手动重置dataIWant属性值,如果POST后需要重新加载cTypes列表,不要对dataIWant重新赋值。

内容的提问来源于stack exchange,提问作者CuriousOne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:45:45