我有一个客户需要表单上有两个按钮。保存未完成表格进度的表格。因此,此表单仍然需要验证字段,但会忽略所需的验证。另一个按钮将需要运行包含必填字段的完整验证。
我正在使用库存标准 asp.net core 项目,我相信该项目使用 jquery-validation-unobtrusive 并且基于视图模型。
我想做的是当单击“保存进度”按钮时删除所有必需的验证并提交表单。然而,我在堆栈溢出或互联网上找到的代码都不适合我的场景。
我努力了:
<div class="form-group">
<input id="Progress" type="submit" value="Save Progress" onclick="foo()" class="btn btn-default" />
</div>
function foo() {
$('#FamilyName').rules("remove", "required");
return true
}
and
function foo() {
var settings = $('#Registration').validate().settings;
for (var i in settings.rules) {
delete settings.rules[i].required;
}
}
上述两次尝试都成功找到并删除规则,但提交表单时,相关字段的验证仍然失败。
我很困惑,不知道如何继续。
改变required
客户端上的规则不会影响服务器端验证。你的[Required]
属性验证仍然在模型绑定过程中执行,因此ModelState
将无效,并且您需要手动检查每个属性以确定其是否由于以下原因而无效[Required]
属性,或者由于您的其他验证属性之一。
此外,您将需要再次添加所有规则(或重新解析$.validator
)以获得正常提交的客户端验证。
相反,包括一个bool
视图模型中的属性,以便您可以使用条件[RequiredIf]
属性(您可以使用万无一失 https://github.com/leniel/foolproof属性,或者其中的一个这个项目 https://github.com/stephenmuecke/mvc-conditionalvalidation).
然后你的模型将包括
public bool IsDraft { get; set; }
[RequiredIf("IsDraft", false, ErrorMessage = "...")]
public string FamilyName { get; set; }
并在视图中
@Html.HiddenFor(m => m.IsDraft)
@Html.LabelFor(m => m.FamilyName)
@Html.TextBoxFor(m => m.FamilyName)
@Html.ValidationMessageFor(m => m.FamilyName)
<input id="Progress" type="button" value="Save Progress" class="btn btn-default" />
<input id="Final" type="button" value="Save Final" class="btn btn-default" />
以及相关的脚本
$('#Progress').click(function() {
$('#IsDraft').val('True');
$(yourForm).submit();
});
$('#Final').click(function() {
$('#IsDraft').val('False');
$(yourForm).submit();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)