2016-11-13 1 views
0

いくつかの必須属性を含むビューモデルを使用して出荷および課金情報を持つフォームがあります。ASP.NET MVC読み込み専用になった入力を無視したモデルの検証

ここでは、問題を説明するのに十分なコードを示します。ビューモデルの

エキス:

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

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

かみそり形式のエキス:

私は、チェックボックスを使用してチェックされている場合は読み取り専用(BillingPostalCodeを含む)の課金フィールドを作るためにノックアウトを使用
@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) 

obserableable 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 }); 
関連する問題