我有一个包含运费和结算信息的表单,其中包含一些包含一些必需属性的视图模型。
这里有足够的代码来解释这个问题。
视图模型的摘录:
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());
}
});
答案 0 :(得分:0)
它使用的jQuery验证器似乎忽略了只读输入。 我设法解决了这个问题。
$.validator.setDefaults({ ignore: null });