【发布时间】:2017-03-27 05:08:13
【问题描述】:
我有一个包含运输和账单信息的表单,它使用包含一些必需属性的视图模型。
这里有一段足以解释问题的代码。
视图模型的提取:
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());
}
});
【问题讨论】:
-
禁用(只读)复选框不会将值发布到服务器。此链接中提到的许多解决方法应该可以帮助您:stackoverflow.com/questions/4727974/…
-
您能发布您的淘汰赛代码吗?
-
禁用字段不会发布,但只读字段可以正常发布。模型状态也是有效的。问题仅在于客户端验证。
-
使用隐藏字段 -> @Html.HiddenFor(x=> x.BillingPostalCode)
-
@Yanga 这是相关的淘汰赛代码。 var shipping = { billingSameAsShipping: ko.observable(false) }; ko.applyBindings(运费); $("#billingSameAsShippingCheckbox").on("change", function () { if (this.checked) { $("#BillingPostalCode").val($("#ShippingPostalCode").val()); } } );
标签: c# asp.net asp.net-mvc razor knockout.js