ASP.NET为多个验证器显示一条消息

时间:2014-05-22 16:32:23

标签: asp.net validation webforms

首先让我说明我真正要做的事情:我必须检查多个字段" exclusive" (我将解释)标准,并显示一条验证消息。

这是我的代码:

<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"/>

我遗漏了一些标签以便于阅读 - 所有验证器都在同一个验证组中,它们有ID,ControlToValidate="Amount" Display="Dynamic"

如果金额字段为空,或者其中有数字,则一切正常。但是,如果我在文本中放置文本: enter image description here

即使&lt; 10,&gt; 10,000和DataTypeCheck应该是独占的,数字比较也会失败。

我意识到我可以使用CustomValidator来实现这一目标,但我希望最终在不同的<span>元素中以不同的方式设置一个消息。

所以,我的错误(因为他们不是&#34;我真正想做的是什么?&#34;)问题是:

  1. 如何在文本中使CompareValidator种货币类型失败?
  2. 如何仅显示来自多个验证器的第一条消息?
  3. 我该怎么做我想做的事?

2 个答案:

答案 0 :(得分: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,则可以使用

编辑1 更正了比较运算符以允许数字0-9。

答案 1 :(得分: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>

代码隐藏:

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=""时显示。