首先让我说明我真正要做的事情:我必须检查多个字段" 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"
。
如果金额字段为空,或者其中有数字,则一切正常。但是,如果我在文本中放置文本:
即使&lt; 10,&gt; 10,000和DataTypeCheck应该是独占的,数字比较也会失败。
我意识到我可以使用CustomValidator
来实现这一目标,但我希望最终在不同的<span>
元素中以不同的方式设置一个消息。
所以,我的错误(因为他们不是&#34;我真正想做的是什么?&#34;)问题是:
CompareValidator
种货币类型失败? 或 答案 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=""
时显示。