动态更改浏览器MVC上的验证

时间:2014-05-12 12:41:22

标签: asp.net-mvc asp.net-mvc-4 jquery-validate unobtrusive-validation

我正在实施一个捐款表格,我有一个Donation型号的字段" Amount":

[Required]
[DataMember(IsRequired = true)]
[Range(36, 10000)]
public decimal Amount { get; set; }

我也在视图中设置了验证:

<div class="editor-label">
    @Html.LabelFor(model => model.Payment.Amount)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Payment.Amount)
    @Html.ValidationMessageFor(model => model.Payment.Amount)
</div>

问题是,当用户选择不同的&#34;货币&#34;在网页中,某些货币的最低金额应该更改。

我尝试做的是更改Input属性:

$("#Donation_Currency").change(function () {
    var curr = this.value;
    switch (curr) {
        case "USD":
            document.getElementById("Donation_Amount").setAttribute("data-val-range", "The field Amount must be between 36 and 10000.");
            document.getElementById("Donation_Amount").setAttribute("data-val-range-min", "36");
            break;
        case "ILS":
            document.getElementById("Donation_Amount").setAttribute("data-val-range", "The field Amount must be between 100 and 10000.");
            document.getElementById("Donation_Amount").setAttribute("data-val-range-min", "100");
            break;
        default:
    }
});

但即使我看到输入属性发生了变化,我仍然会看到旧信息出现。

我确实做错了,但问题是:

如何根据另一个字段中设置的值更改字段的验证?

1 个答案:

答案 0 :(得分:2)

引用OP

  

&#34;但即使我看到输入属性发生了变化,我仍然会看到旧信息出现。&#34;

这是因为一旦插件初始化,你就不能只是通过改变HTML属性来改变jQuery Validate选项(正如你所了解的那样)。插件初始化在页面加载时发生一次,再也不会发生。

初始化后,您必须使用插件提供的方法对规则进行动态更改。 See the .rules('add') method动态添加规则...它覆盖先前定义的规则。

尝试更像这样的东西......

$("#Donation_Currency").change(function () {
    var curr = this.value;
    switch (curr) {
        case "USD":
            $("#Donation_Amount").rules('add', {
                range: [36,10000],
                messages: {
                    range: "The field Amount must be between 36 and 10000."
                }
            });
            break;
        case "ILS":
            $("#Donation_Amount").rules('add', {
                range: [100,10000],
                messages: {
                    range: "The field Amount must be between 100 and 10000."
                }
            });
            break;
        default:
    }
});