【问题标题】:ASP.NET MVC 3: client-side validation message sticks around afterward if target field disabledASP.NET MVC 3:如果目标字段被禁用,客户端验证消息会一直存在
【发布时间】:2011-10-25 17:55:05
【问题描述】:

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

我将 Simon Ince 的 RequiredIf 属性应用于模型中的字段 A,取决于选项 1,并且效果很好。那不是问题。

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

  1. 用户选择了选项 2(因此字段 A 是必需的)并且字段 A 为空。
  2. 用户单击保存。验证消息出现在字段 A 和验证摘要中。一切都很好。
  3. 用户更改为选项 1。字段 A 被禁用。
  4. 用户单击保存。验证消息保留在字段 A 中,但 不 出现在验证摘要中。

我由此得出结论,RequiredIf 验证正在工作(并且字段 A 正在通过验证),但旧的验证消息仍然存在。我不想要。

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

如果该字段没有被禁用,一切都会按预期工作,但我希望它被禁用而不是可编辑,但“必须为空”。

除了通过js和jQuery清除message SPAN标签,有没有办法解决这个问题?

【问题讨论】:

    标签: asp.net-mvc-3 validation


    【解决方案1】:

    由于验证要求正在发生变化,您需要进行验证,然后更新所有错误消息。由于问题与下拉列表中所选项目的更改有关,因此添加以下内容:

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

    【讨论】:

    • 谢谢;我会试试的。但是,在上面的第 4 步中单击第二个提交按钮是否会产生重新运行验证的效果?我已经知道这不会导致剩余的验证消息消失。 ETA:不,不幸的是,您的建议并没有让消息消失。它仍然存在。
    • 呃!您的意思是在我禁用字段 A 之前重新进行验证!是的,这就解决了!谢谢!
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多