我正在使用3个验证器来验证TextBox,但是当在文本框中输入无效值时,所有验证器都会被触发。但我希望这些验证器按特定顺序工作,以便用户可以逐个解决这些错误。
<asp:TextBox ID="txt_temp" runat="server"></asp:TextBox>
<asp:CompareValidator ID="cv_txt_temp" runat="server" CssClass="error" ControlToValidate="txt_temp" ValueToCompare="0" Type="Double" Operator="GreaterThanEqual" ValidationGroup="insert" SetFocusOnError="true" ErrorMessage="Must be valid value" Display="Dynamic"></asp:CompareValidator>
<asp:RegularExpressionValidator ID="rev_txt_temp" CssClass="error" SetFocusOnError="true"
runat="server" ErrorMessage="Value upto 1 decimal place" Display="Dynamic" ControlToValidate="txt_temp" ValidationExpression="\d+(?:(?:\.|,)\d{0,1})?" ValidationGroup="insert"></asp:RegularExpressionValidator>
<asp:RangeValidator ID="rv_txt_temp" Display="Dynamic" runat="server" SetFocusOnError="true" ValidationGroup="insert" ControlToValidate="txt_temp" Type="Double" CssClass="error"></asp:RangeValidator>
答案 0 :(得分:5)
您添加的验证程序会自动按照创建顺序将自己添加到 Page.Validators集合。 验证按照它们在Page.Validators集合中的顺序运行,这意味着aspx文件中显示的第一个验证器定义首先在Page.Validators中。如果你想要更改订单,那么唯一的方法是按照您希望它们触发的顺序将所有验证器放入页面。
修改:在您的情况下,唯一的方法是使用css重叠验证器。
答案 1 :(得分:0)
您只能尝试使用RegularExpressionValidator
<asp:RegularExpressionValidator ID="rev_txt_temp" CssClass="error" SetFocusOnError="true"
runat="server" ErrorMessage="Error.." Display="Dynamic" ControlToValidate="txt_temp"
ValidationExpression="^[1-9]\d*(\.\d{0,1})?$" ValidationGroup="insert">
</asp:RegularExpressionValidator>
让我知道,如果你想以其他方式......
答案 2 :(得分:0)
您可以使用自定义验证器,自定义Javascript或蒙面编辑验证器
答案 3 :(得分:0)
您可以创建自定义验证。这需要时间,但您可以控制验证顺序。 您还可以使用蒙面文本框扩展器。
答案 4 :(得分:0)
我的“设置验证顺序”解决方案是: 在具有验证器的页面上: 1)我在aspx代码中将AutoEventWireup设置为false并使用自定义验证器 2)我创建并调用验证函数并为相关验证器设置“IsValid”:
validCustom1.IsValid = Validation1(textbox1.Text);
if (Page.IsValid)
validCustom2.IsValid = Validation2(textbox2.Text);
if (Page.IsValid)
validCustom3.IsValid = Validation3(textbox3.Text);
if (Page.IsValid)
{
//Do somethink
}
else
{
//Do somethink else
}