2016-09-02 2 views
0

У меня есть поле количества в представлении, которое требуется, если флажок установлен.Проверка на стороне клиента ASP.NET MVC5

После того, как Razor отображает данные View с моделью, и пользователь проверяет флажок без соответствующей суммы. Появится сообщение «Проверка». Если я отключу этот флажок, сообщение проверки не исчезнет.

Я попытался использовать 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-with-asp-net-mvc-add-client-side-support/ –

+0

Какой плагин вы используете для своих пользовательских атрибутов (или у вас есть?). Нет причин повторять валидатор. И не устанавливайте атрибут 'id' - просто переписываете идентификатор, сгенерированный методами' HtmlHelper' –

ответ

0

Попробуйте отключить на стороне клиента проверки на OnClick событий отнести: https://jqueryvalidation.org/validate/#onclick

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

ИЛИ

$("#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(); 
 
    } 
 
}

Смежные вопросы