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

ASP.NET MVC中DropDownListFor提交表单选中值始终返回0如何解决

问题排查与解决方法

1. 检查下拉选项值绑定是否正确

首先确认Category类的主键属性名是否和SelectList中指定的value字段一致:
如果你的Category类主键不是Id,而是CategoryId之类的其他名称,需要修改DropDownListFor中SelectList的参数:

// 把第二个参数改成你Category类实际的主键字段名
@Html.DropDownListFor(model => model.SelectedId,new SelectList(Model.Categories,"实际主键名","CategoryName"),"Select Category", new { @class = "form-control" } )

你可以打开浏览器F12开发者工具,查看生成的<select>节点下的<option>的value属性是否为正确的分类ID,如果所有value为空,就属于字段名不匹配的问题。

2. 排查美化插件的数值同步问题

你用到了nice-select下拉美化插件,这类插件通常会隐藏原生<select>元素,用自定义DOM模拟下拉效果,若插件没有自动把选中值同步回原生<select>,就会导致提交时始终拿到默认值0。
你可以先移除<div>上的nice-select single-select类,用原生下拉框测试提交,如果能拿到正确值,就属于插件同步问题,添加以下JS代码手动同步值即可:

$('.nice-select').on('change', function() {
  $('#SelectedId').val($(this).val());
});

3. 检查表单提交的实际参数

打开浏览器F12的「网络」面板,点击提交按钮后查看ProductSave请求的表单数据:

  • 如果请求里的SelectedId值正确,但后端拿到的是0,检查是否有全局过滤器、自定义模型绑定器修改了该属性的值
  • 如果请求里的SelectedId值为0,检查页面是否存在多个同名的SelectedId字段(比如隐藏的input),优先级更高的字段把值覆盖了
  • 如果请求里没有SelectedId字段,回到前两步排查前端绑定问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:36:03