在Razor Web应用中,能否通过文本框验证成功修改另一文本框的值?
实现Razor表单验证通过后的联动操作
你需要在客户端监听foo字段的验证状态,当它通过范围验证时,自动更新被禁用的foofoo输入框的值。这里我们可以借助ASP.NET MVC默认集成的jQuery Validate插件来实现实时监听,具体步骤如下:
1. 修改表单字段标记
先给foo和foofoo的输入框加上明确的ID,方便后续JS精准定位:
<div class="form-group"> @Html.LabelFor(model => model.foo, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.foo, new { htmlAttributes = new { @class = "form-control", id = "foo-input" } }) @Html.ValidationMessageFor(model => model.foo, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.foofoo, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.foofoo, new { htmlAttributes = new { disabled = "disabled", @class = "form-control", id = "foofoo-input" } }) <!-- 可选:添加隐藏字段,让禁用的foofoo值能被服务器端接收 --> @Html.HiddenFor(model => model.foofoo, new { id = "foofoo-hidden" }) </div> </div>
2. 添加客户端脚本监听验证状态
在页面的@section Scripts块(或者页面底部)添加以下jQuery代码,实时监听foo的验证状态并执行对应操作:
@section Scripts { @Scripts.Render("~/bundles/jqueryval") <script> $(function() { // 监听foo输入框的输入、失去焦点事件,触发验证 $('#foo-input').on('input blur', function() { const $fooInput = $(this); // 手动触发当前字段的验证 $fooInput.valid(); // 检查字段是否通过所有验证(包括你的范围验证) if ($fooInput.hasClass('valid')) { // 验证通过时更新foofoo的值,这里可以自定义逻辑 const fooValue = parseInt($fooInput.val()); const targetValue = fooValue * 0.1; // 示例:设置为foo值的10% $('#foofoo-input').val(targetValue); // 如果加了隐藏字段,同步更新它的值,保证服务器能获取到 $('#foofoo-hidden').val(targetValue); } else { // 验证不通过时可以清空foofoo,可选操作 $('#foofoo-input').val(''); $('#foofoo-hidden').val(''); } }); }); </script> }
补充说明
- 上面的代码是实时反馈,用户输入或离开
foo输入框时就会触发验证和更新,体验更流畅;如果只需要在表单提交前执行,也可以监听表单的submit事件。 - 确保页面已经加载了jQuery和jQuery Validate脚本,
@Scripts.Render("~/bundles/jqueryval")会自动加载这些资源,默认MVC项目已经配置好。 - 因为禁用的输入框不会提交值,所以添加隐藏字段是为了让服务器端能接收到
foofoo的更新后的值,如果不需要服务器处理这个值,可以省略隐藏字段。
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

