ASP MVC中如何动态移除元素的required属性?

9
在使用无侵入式验证的ASP MVC项目中,有没有一种方法可以动态地从元素中删除必填属性?该元素在视图模型中被注释为必填。我尝试使用JQuery删除" data-val-required "html属性,但客户端验证仍将该元素视为必填项。是否不可能通过操作无侵入式验证属性来操纵元素的验证?这是我尝试过的方法,但它没有起作用。如果未选中复选框,则希望删除所需属性。
$("#chkTempHire").click(function () {

    var checked = $(this).attr("checked");
    var attr = $("#txtTempHireEndDate").attr("data-val-required");
    var hasAttr = false;

    if (typeof attr !== typeof undefined && attr !== false)
        hasAttr = true;

    if (!checked && hasAttr)
        $("#txtTempHireEndDate").removeAttr("data-val-required");
});

我有点不明白,还是这个不可能实现?谢谢!

3
一种解决方案是使用MVC的Foolproof Validation,它允许您使用RequiredIf等属性。该方法可以帮助您验证数据并确保数据满足特定条件。 - Icemanind
2
条件验证是您正在寻找的,例如:https://dev59.com/smMl5IYBdhLWcg3w_bDj - Nico
谢谢,我正在使用FluentValidation,它对我很有效。我只是一直在尝试了解更多关于无侵入式验证的工作原理。 - Mike
4个回答

29
你可以使用jQuery内置的.rules()方法,而无需手动删除属性。

要删除:

$("#txtTempHireEndDate").rules("remove", "required")

补充:

$("#txtTempHireEndDate").rules("add", "required")

1
成功了!!非常感谢。 - Mike
非常标准、整洁和清晰的方法。 - phougatv

2

0

$("#dailyFlow").removeAttr('data-val-required');


感谢您的贡献!请添加解释,特别是与其他答案相比的差异和优势。 - Max Vollmer

0

您必须重新验证表单。

只需从表单中调用验证函数,像这样:

$('#FormId').valid();

您还可以验证已删除属性的控件:

$('#txtTempHireEndDate').valid();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接