【问题标题】:dynamically remove an element's required attribute in ASP MVC?在 ASP MVC 中动态删除元素的必需属性?
【发布时间】:2015-07-16 23:04:25
【问题描述】:

在 ASP MVC 项目中使用不显眼的验证,有没有办法从元素中动态删除 Required 属性?

该元素在视图模型中使用必需注释进行装饰。我想我可以通过使用 JQuery 删除 html 属性“data-val-required”来删除它,但客户端验证仍将元素视为必需的。是不是不能通过操纵不显眼的验证属性来操纵元素的验证?

这是我尝试过的,但没有奏效。如果未选中复选框,我想删除所需的属性。

$("#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");
});

我错过了什么,还是不可能?

谢谢!

【问题讨论】:

  • 一种解决方案是使用MVC的Foolproof Validation,它允许你使用RequiredIf等属性。
  • 条件验证就是你要找的,例如:stackoverflow.com/questions/17970584/…
  • 谢谢,我正在使用 FluentValidation,它对我有用。我一直在尝试更多地了解不显眼的验证是如何工作的。

标签: javascript jquery asp.net-mvc unobtrusive-validation


【解决方案1】:

可以使用jQuery内置的.rules()方法,不需要手动删除属性。

删除:

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

添加:

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

【讨论】:

  • 成功了!!非常感谢。
  • 非常标准、整洁和干净的方法。
【解决方案2】:

你可以在 jquery.validate 中使用规则函数

$("..").rules("add",....)
$("..").rules("remove",...)

http://jqueryvalidation.org/rules

【讨论】:

    【解决方案3】:

    您必须重新验证表单。

    只需从表单中调用验证函数,如下所示:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 感谢您的贡献!请添加解释,特别是与其他答案相比的区别和好处。
      猜你喜欢
      • 2011-12-21
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2015-10-20
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      相关资源
      最近更新 更多