Asp.net mvc 3 ASP.NET MVC 3:如果目标字段被禁用,则客户端验证消息随后会出现

Asp.net mvc 3 ASP.NET MVC 3:如果目标字段被禁用,则客户端验证消息随后会出现,asp.net-mvc-3,validation,Asp.net Mvc 3,Validation,我有一个表单,其中有一个字段(字段a),如果在下拉列表中选择了选项1,则该字段需要为空;如果选择了选项2,则该字段是必需的。我有一些javascript在选择选项1时清除和禁用字段A 我已将Simon Ince的RequiredIf属性应用于模型中的字段A,具体取决于选项1,并且效果良好。这不是问题所在 以下是导致问题的事件顺序: 用户选择了选项2(因此字段A是必需的),字段A为空 用户点击保存。验证消息按字段A显示,并显示在验证摘要中。一切都很好 用户更改为选项1。字段A变为禁用状态 用户点击

我有一个表单,其中有一个字段(字段a),如果在下拉列表中选择了选项1,则该字段需要为空;如果选择了选项2,则该字段是必需的。我有一些javascript在选择选项1时清除和禁用字段A

我已将Simon Ince的RequiredIf属性应用于模型中的字段A,具体取决于选项1,并且效果良好。这不是问题所在

以下是导致问题的事件顺序:

  • 用户选择了选项2(因此字段A是必需的),字段A为空
  • 用户点击保存。验证消息按字段A显示,并显示在验证摘要中。一切都很好
  • 用户更改为选项1。字段A变为禁用状态
  • 用户点击保存。验证消息按字段A保留,但不在验证摘要中显示 我由此得出结论,RequiredIf验证正在工作(字段A正在通过验证),但旧的验证消息仍然存在。这是我不想要的

    顺便说一句,所有这些都是客户端的

    如果该字段未被禁用,则一切正常,但我希望它被禁用,而不是可编辑,但“必须为空”


    除了通过js和jQuery清除消息SPAN标记外,还有什么方法可以解决这个问题吗

    由于验证要求正在更改,您需要进行验证,然后更新所有错误消息。由于问题与dropdownlist上所选项目的更改有关,请添加以下内容:

    $("#myDropDown").live("change", function() { // assumes dropdownlist has id of 'myDropDown'
        $("form").validate().form(); // form() causes error messages to update
    });
    

    由于验证要求正在更改,因此需要进行验证,然后更新所有错误消息。由于问题与dropdownlist上所选项目的更改有关,请添加以下内容:

    $("#myDropDown").live("change", function() { // assumes dropdownlist has id of 'myDropDown'
        $("form").validate().form(); // form() causes error messages to update
    });
    

    非常感谢。我试试看。但是,上面步骤4中的第二个submit按钮是否会产生重新运行验证的效果?我已经知道,这不会导致剩余的验证消息消失。埃塔:不,不幸的是,你的建议没有让信息消失。它仍然在附近。呸!你的意思是在我禁用字段A之前重新进行验证!是的,这就解决了!非常感谢。非常感谢。我试试看。但是,上面步骤4中的第二个submit按钮是否会产生重新运行验证的效果?我已经知道,这不会导致剩余的验证消息消失。埃塔:不,不幸的是,你的建议没有让信息消失。它仍然在附近。呸!你的意思是在我禁用字段A之前重新进行验证!是的,这就解决了!非常感谢。