提交按钮未提交表单,反而将光标移至输入框问题求助
问题排查与解决步骤
1. 排查HTML5表单验证问题
点击提交按钮后光标跳转到Price字段,大概率是该字段触发了HTML5默认验证规则,导致浏览器阻止表单提交并聚焦到错误字段:
- 按下F12打开浏览器开发者工具,查看控制台是否有验证失败的提示信息。
- 检查后端模型中
Surcharges[i].Price的定义:如果是值类型(如decimal、int)且未标记为可空,Razor会自动给对应input添加required属性,若字段为空则验证失败;同时会生成type="number"属性,若输入非数字内容也会触发验证失败。
对应解决方法:
- 若Price允许为空,将后端模型的Price字段改为可空类型(如
decimal?)。 - 若需临时跳过验证测试,可给表单添加
novalidate属性关闭HTML5默认验证:
<form autocomplete="off" asp-controller="PriceList" asp-action="UpdateSurchargeFixPrices" enctype="multipart/form-data" novalidate>
2. 移除冗余的value属性
Razor的asp-for标签助手会自动根据模型值生成value属性,手动添加value="@Model.Surcharges[i].XXX"会造成冗余,甚至可能导致模型绑定异常。建议移除所有带有asp-for的input上的手动value属性:
修改前:
<input value="@Model.Surcharges[i].Price" asp-for="Surcharges[i].Price" />
修改后:
<input asp-for="Surcharges[i].Price" />
(对所有使用asp-for的input字段执行此修改)
3. 确认提交按钮的有效性
检查提交按钮的type="submit"属性是否正确,且按钮位于<form>标签内部(你的代码中按钮位置符合要求,可再次确认未被其他元素意外截断)。
4. 验证模型绑定规则
确保后端控制器的UpdateSurchargeFixPrices方法接收的模型类型正确,你的代码中用for循环索引绑定集合的方式符合ASP.NET Core列表绑定规则,这部分无需调整。
内容的提问来源于stack exchange,提问作者Tobias Mikutta
相关产品推荐
相关产品推荐

