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

ASP.NET Core 8.0 MVC中提交禁用控件值的脚本失效问题

解决ASP.NET Core 8.0 MVC中禁用表单控件无法提交值的问题

你的代码存在两个核心问题导致禁用控件的值无法正常提交:

问题1:脚本执行时机错误

脚本写在<form>标签之前,此时DOM还未完成渲染,$('form')无法找到对应的表单元素,导致提交事件绑定失败。

问题2:事件参数重名冲突

each循环里的参数e和外层submit事件的事件对象重名,会覆盖原始事件对象,可能导致后续逻辑异常。


修正方案1:调整脚本执行时机并修复参数冲突

把脚本移到@section Scripts中(确保jQuery已加载),同时修改循环参数名,还可以精准定位需要启用的控件,避免影响其他禁用元素:

@model Profession

<form method="post">
    <div class="border p-3 mt-4 row">
        <div class="row pb-2">
            <h2 class="text-primary">MODIFIER UNE PROFESSION</h2>
            <hr />
        </div>
        <div class="mb-3 row p-1" style="width: 15em;">
            <label asp-for="NoProfession"> </label>
            <input asp-for="NoProfession" class="form-control" disabled />
        </div>
        <br />
        <div class="mb-3 row p-1">
            <label asp-for="NomProfession"> </label>
            <input asp-for="NomProfession" class="form-control" />
            <span asp-validation-for="NomProfession" class="text-bg-danger"> </span>
        </div>
        <br />
        <div class="mb-3 row p-1">
            <label asp-for="Inactif"> </label>
            <input asp-for="Inactif" class="form-check-input" type="checkbox">
        </div>
        <br />
        <div class="mb-3 row p-1">
            <label asp-for="RemProfession"> </label>
            <textarea asp-for="RemProfession" class="form-control" rows="5"></textarea>
        </div>
        <div class="row">
            <div class="col-6 col-md-3">
                <button type="submit" class="btn btn-primary form-control">Modifier</button>
            </div>
            <div class="col-6 col-md-3">
                <a asp-controller="Administrateur" asp-action="Professions" class="btn btn-secondary border form-control">
                    Retour à la liste des professions
                </a>
            </div>
        </div>
    </div>
</form>

@section Scripts {
    @* ********** 启用前端验证 ********** *@
    <partial name="_ValidationScriptsPartial" />
    
    @* ********** 提交时启用指定禁用字段 ********** *@
    <script type="text/javascript">
        $('form').submit(function(e) {
            // 避免参数重名,改用其他变量名
            $(':disabled[name="NoProfession"]').each(function() {
                $(this).removeAttr('disabled');
            });
        });
    </script>
}

修正方案2:使用隐藏字段替代禁用控件(更可靠)

如果不想依赖JavaScript,推荐添加一个隐藏字段保存NoProfession的值,这样即使输入框禁用,隐藏字段也会自动提交值,兼容性更好:

<div class="mb-3 row p-1" style="width: 15em;">
    <label asp-for="NoProfession"> </label>
    <input asp-for="NoProfession" class="form-control" disabled />
    <!-- 添加隐藏字段同步值 -->
    <input type="hidden" asp-for="NoProfession" />
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:48:28