Asp.net mvc 浏览器MVC上的动态变更验证

Asp.net mvc 浏览器MVC上的动态变更验证,asp.net-mvc,asp.net-mvc-4,jquery-validate,unobtrusive-validation,Asp.net Mvc,Asp.net Mvc 4,Jquery Validate,Unobtrusive Validation,我正在实施一个捐赠表单,我有一个带有“金额”字段的捐赠模型: 我还在视图中设置了它的验证: <div class="editor-label"> @Html.LabelFor(model => model.Payment.Amount) </div> <div class="editor-field"> @Html.EditorFor(model => model.Payment.Amount) @Html.Validati

我正在实施一个捐赠表单,我有一个带有“金额”字段的
捐赠
模型:

我还在视图中设置了它的验证:

<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>
但是,即使我看到输入属性发生了更改,我仍然看到旧消息出现

我肯定做错了什么,但问题是:


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

“但是,即使我看到输入属性发生了更改,我仍然看到旧消息出现。”

这是因为一旦插件被初始化,您就不能通过更改HTML属性来简单地更改jQuery验证选项(如您所了解的)。插件初始化在页面加载时发生一次,以后不再发生

初始化后,必须使用插件提供的方法对规则进行动态更改。动态添加规则…它还将覆盖以前定义的规则

试试这样的东西

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

您确定消息来自客户端验证吗?可能是在客户端成功验证了输入,但当输入到达服务器时,返回消息,因为在server.hi@srinivas.naik上的范围仍然在36到10000之间。当我在开发人员模式下查看输入的属性时,除此之外,我将其设置为一个比实际值更大的值(100而不是36),因此服务器上的最小值仍然较低。感谢您的响应,我尝试这样做,但在.role(…)行中出现错误:“uncaughttypeerror:undefined不是函数”(我用户chrome)我不知道为什么,但是开发者控制台上的.validation()功能也不起作用-你有什么想法吗?我解决了上面评论的错误,现在它起作用了-谢谢!
$("#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:
    }
});
$("#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:
    }
});