2016-09-02 41 views
0

チェックボックスをオンにすると必要なビューにamountフィールドがあります。ASP.NET MVC5クライアント側の検証

Razorはモデルデータを含むビューをレンダリングし、対応する金額を入力しないでチェックボックスをチェックします。検証メッセージが表示されます。そのチェックボックスの選択を解除すると、検証メッセージは消えません。

jqueryを使用して生成されたすべてのルールを削除しようとしましたが、ユーザーがチェックボックスを再度使用すると、それらの検証ルールが削除されていました本当に醜いです。)

MVCモデルで同じ要件を満たすクライアント側を再検証する方法はありますか?

モデル:

[Display(Name = "Include Amount")] 
public bool IncludeAmount { get; set; } 
[Display(Name = "Amount")] 
[RequiredIf("IncludeAmount", TargetValue = true, ErrorMessage = "Amount is required.")] 
[MaxDigits(10, 2)] 
[RegularExpression(RegularExpressions.Money, ErrorMessage = ErrorMessages.NumericValueInvalidFormat)] 
[GreaterThanZero] 
public Nullable<decimal> Amount { get; set; } 

ビュー:

<td class="dataEntryLabel" colspan="2"> 
    @Html.LabelFor(model => model.IncludeAmount) 
</td> 
<td class="dataEntryField" colspan="2"> 
    @Html.CheckBoxFor(model => model.IncludeAmount, new { id = "IncludeAmount" }) 
    <span class="dollar-sign">@Html.TextBoxFor(model => model.Amount, "{0:F}", new { id = "Amount", disabled = "disabled" })</span> 
    @Html.ValidationMessageFor(model => model.Amount) 
</td> 

のJavaScript(クライアント側):

function fixUnobtrusiveValidations() { 
    var form = getForm(); 
    (<any>$).validator.unobtrusive.parse(form); 
} 

function onClickCheckBoxIncludeAmount(){ 
     fixUnobtrusiveValidations(); 
} 

$('IncludeAmount').click(onClickCheckBoxIncludeAmount); 
+0

をhttps://code.msdn.microsoft.com/Flexible-Conditional-37ae638e/sourcecodeこれを試してみてください?fileId = 65995&pathId = 91939366 ここにいくつかの説明があります。https://blogs.msdn.microsoft.com/stuartleeks/ 2012/09/07/flexible-conditional-validation-asp-net-mvc-add-client-side-support/ –

+0

カスタム属性に使用しているプラ​​グインは何ですか?バリデータを再解析する理由はありません。 'id'属性を設定しないでください。' HtmlHelper'メソッドによって生成されたidを上書きするだけです。 –

答えて

0

のonclickイベントで、クライアント側の検証を無効にするには、これを試してみてください 参照してください。 https://jqueryvalidation.org/validate/#onclick

$("#myform").validate({ 
    onclick: false, 
}); 

OR

$("#yourChkboxID").validate({ 
    onclick: false, 
}); 
+0

上記の回答を参照してください。私はうまく動作することができませんでした。 – Wendi

0

これが働いた:

if (!($('#IncludeAmount').checked)){ 
 
    toggleValidatorVisibility($('#Amount'), false); 
 
} 
 

 
function toggleValidatorVisibility(element: any, value) { 
 
    var td: any = element.closest('td'); 
 
    if (value) { 
 
     td.find('span.field-validation-error').show(); 
 
    } else { 
 
     td.find('span.field-validation-error').empty(); 
 
    } 
 
}

関連する問題