2014-05-22 3 views
0

Позвольте мне начать с того, что я действительно пытаюсь сделать: мне нужно проверить поле для нескольких «эксклюзивных» (я объясню) критериев и отобразить одно сообщение проверки ,ASP.NET отображает одно сообщение для нескольких валидаторов

Вот мой код:

<asp:TextBox ID="Amount" runat="server" CssClass="field"></asp:TextBox> 
<asp:RequiredFieldValidator Text="Amount is required"/> 
<asp:CompareValidator Operator="DataTypeCheck" Type="Currency" Text="Amount must be numeric"/> 
<asp:CompareValidator Operator="GreaterThanEqual" ValueToCompare="10" Type="Currency" Text="Minimum donation $10.00"/> 
<asp:CompareValidator Operator="LessThan" ValueToCompare="10000" Type="Currency" Text="Wow that's too much"/> 

Я кончил некоторые тег для удобства чтения - все валидаторы в одной и ту же группе проверки, они имеют идентификаторы, ControlToValidate="Amount" Display="Dynamic".

Если поле Сумма пуста или имеет номер в нем, все в порядке. Тем не менее, если я надену текст в поле: enter image description here

Несмотря на то, < 10,> 10000 и DataTypeCheck должны быть исключительными, числовые сравнения потерпеть неудачу на струне.

Я понимаю, что для этого я мог бы использовать CustomValidator, но я хотел бы, в конце концов, написать один текст по-своему, в своем собственном отдельном элементе <span>.

Итак, мой неправильно (потому что они не «Что я на самом деле пытается сделать?») Являются следующие вопросы:

  1. Как сделать CompareValidator валюты типа не обязательно по тексту? или
  2. Как отобразить только первое сообщение из нескольких валидаторов? или
  3. Как мне сделать то, что я хочу?
+0

Похоже, что CustomValidator - ваш лучший вариант. Единственное, что вас останавливает, - это различие в появлении одного сообщения - его можно легко понять. – Andrei

ответ

1

Итак, я закончил с помощью CustomValidator и установил ярлык, где мне было нужно мое другое сообщение.

.aspx страница:

<span> 
    <asp:TextBox ID="Amount" runat="server" CssClass="field"></asp:TextBox> 
    <asp:RequiredFieldValidator [same as earlier...] /> 
    <asp:CustomValidator ID="AmountCustomValidator" ControlToValidate="Amount" ValidateEmptyText="False" OnServerValidate="AmountCustomValidator_ServerValidate"/> 
</span> 
<span> 
    <asp:Label ID="AmountTooMuchMessage" runat="server" Text="" /> 
</span> 

Code-за:

protected void AmountCustomValidator_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    args.IsValid = true; 
    AmountTooMuchMessage.Text = ""; //Reset special error label text 

    decimal amountFormatted; 

    if (!decimal.TryParse(args.Value, out amountFormatted)) 
    { 
     AmountCustomValidator.Text = "Amount must be numeric"; 
     args.IsValid = false; 
     return; //Don't try to compare values to non-numeric input 
    } 

    //This is money, so make it two decimals 
    amountFormatted = Math.Round(amountFormatted, 2); 
    Amount.Text = amountFormatted.ToString(); 

    if (amountFormatted < 10) 
    { 
     AmountCustomValidator.Text = "Minimum donation $10.00"; 
     args.IsValid = false; 
    } 

    if (amountFormatted > 10000) 
    { 
     AmountCustomValidator.Text = ""; 
     AmountTooMuchMessage.Text = "That's too much"; 
     args.IsValid = false; 
    } 
} 

Обратите внимание, что я должен был удалить ErrorMessage тег на CustomValidator, в противном случае он будет показывать когда Text="".

1
$(document).ready(function() { 
$("#txtboxToFilter").keydown(function(event) { 
    // Allow only backspace and delete 
    if (event.keyCode == 46 || event.keyCode == 8) { 
     // let it happen, don't do anything 
    } 
    else { 
     // Ensure that it is a number and stop the keypress 
     if (event.keyCode > 48 || event.keyCode < 57) { 
      event.preventDefault(); 
     } 
    } 
}); 

});

Кроме того, если вы используете HTML5 вы могли бы просто использовать

EDIT 1 исправил оператор сравнения, чтобы цифры 0-9.

+0

+0

Я попробовал добавить 'type =" number "', но браузер заканчивает тем, что укладывал его своим собственным стилем (счетчик спинов, красная светящаяся граница для недействительных). – Aaroninus

+0

Попробуйте JS-код, затем .. –

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