ASP.NET MVC模型验证忽略已成为只读的输入

时间:2016-11-13 12:36:27

标签: c# asp.net asp.net-mvc razor knockout.js

我有一个包含运费和结算信息的表单,其中包含一些包含一些必需属性的视图模型。

这里有足够的代码来解释这个问题。

视图模型的摘录:

public class CheckoutViewModel
{
    [Required]
    public string ShippingPostalCode { get; set; }

    [Required(ErrorMessage = "*")]
    public string BillingPostalCode { get; set; }
}

剃刀形式的摘录:

@Html.TextBoxFor(m => m.ShippingPostalCode, new { @class = "form-control", placeholder = "Postal code" })
@Html.TextBoxFor(m => m.BillingPostalCode, new { @class = "form-control", placeholder = "Postal code", data_bind = "attr: { 'readonly': billingSameAsShipping }" }) @Html.ValidationMessageFor(model => model.BillingPostalCode)

如果使用可观察的billingSameAsShipping变量选中复选框,我会使用Knockout将记帐字段(包括BillingPostalCode)设为只读。

<input type="checkbox" data-bind="checked: billingSameAsShipping" id="billingSameAsShippingCheckbox" />

如果未选中该复选框,并且BillingPostalCode保留为空,则验证将正确触发。 但是,如果BillingPostalCode为空但选中了复选框,则只读取字段,则不会触发验证,并且ModelState的IsValid值为true。

任何线索,如果这种预期的行为,或想法如何解决它?

感谢任何帮助。感谢。

编辑:如果有帮助,我添加了JavaScript代码。

var shipping = {
    billingSameAsShipping: ko.observable(false)
};
ko.applyBindings(shipping);

$("#billingSameAsShippingCheckbox").on("change", function () {
    if (this.checked) {
        $("#BillingPostalCode").val($("#ShippingPostalCode").val());
    }
});

1 个答案:

答案 0 :(得分:0)

它使用的jQuery验证器似乎忽略了只读输入。 我设法解决了这个问题。

$.validator.setDefaults({ ignore: null });