2016-11-13 58 views
0

我有一个包含一些必需属性的视图模型的运输和帐单信息的表单。ASP.NET MVC模型验证忽略已变为只读的输入

下面是足以解释问题的一段代码。

提取视图模型的:

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) 

我使用基因敲除,使计费域(包括BillingPostalCode)只读如果复选框被使用检查可观察到的billingSameAsShipping变量。

<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

禁用(只读)复选框不会将值发送到服务器。 在这个链接中提到了很多解决方法,可以帮助你:http://stackoverflow.com/questions/4727974/how-to-post-submit-an-input-checkbox-that-is-disabled – Boney

+0

你可以发布你的淘汰赛代码? – Yanga

+0

已禁用的字段不会发布,但只读发布状态良好。模型状态也是有效的。问题只在于客户端验证。 –

回答

0

看来,它使用的jQuery验证程序忽略只读输入。 我设法解决这个问题。

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