为何这段JavaScript仅禁用嵌套视图表单?
问题解答
为什么脚本只禁用嵌套视图的表单元素?
你的禁用脚本 $("#Form *").prop("disabled", true); 遵循以下选择逻辑:
#Form:通过元素ID精准匹配页面上ID为Form的元素*:选中该元素下的所有后代元素
也就是说,只有ID为Form的容器(也就是你嵌套视图TheView.cshtml里的表单或控件容器)内的所有表单控件会被设置为禁用状态。
而页面上的主表单是通过 @using (Html.BeginForm("Modify", "Controller", FormMethod.Post)) 生成的,默认情况下这个表单元素不会带有id="Form"属性,因此不会被脚本选中,自然不会被禁用。
验证建议
打开浏览器开发者工具(F12)查看页面DOM结构就能确认:
- 嵌套视图渲染后的元素,外层容器(通常是
<form>标签)会带有id="Form" - 主表单的DOM元素,要么没有ID,要么是其他自定义/自动生成的值
优化方向(可选)
如果想更清晰地控制禁用范围,可以:
- 给嵌套视图的表单明确指定唯一ID:在
TheView.cshtml的表单标签里加上id="NestedForm",脚本改成$("#NestedForm *").prop("disabled", true);,避免和其他元素ID冲突 - 给主表单也指定ID方便后续操作:
@using (Html.BeginForm("Modify", "Controller", FormMethod.Post, new { id = "MainForm" }))
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

