【问题标题】:ASP.NET MVC Model validation ignoring inputs that have become readonlyASP.NET MVC 模型验证忽略已变为只读的输入
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2015-02-26
    • 1970-01-01
    • 2021-07-10
    • 2011-12-24
    • 1970-01-01
    • 2013-07-01
    • 2012-05-20
    相关资源
    最近更新 更多