[英]How to prevent CompareValidator from firing while trying to fire RegularExpressionValidator in ASP.NET Gridview?
這是我在GridView中的一小段aspx代碼:
<asp:TemplateField HeaderText="Quantity" >
<ItemTemplate>
<asp:TextBox ID ="TextBox1" runat="server" Width="60px" DataField="Product_Quantity" Text='<%#Eval("Product_Quantity")%>' />
<asp:Button ID ="Button1" runat="server" OnClick="Quantity_Update_Click" ValidationGroup="UpdateQuantity" CommandArgument="Button12" CommandName="Update" Text="Update" />
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="Must be greater than 0" Operator="GreaterThan" Type="Integer" ValueToCompare="0" />
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Numbers only but no decimals" ControlToValidate="TextBox1" ValidationExpression="^[0-9]*$"></asp:RegularExpressionValidator>
</ItemTemplate>
在TextBox1中,如果鍵入0,則僅觸發CompareValidator消息,而這正是我想要的。
再次在TextBox1中,如果我鍵入2.5 或如果我鍵入abcd,則CompareValidator消息和RegularExpressionValidator消息會同時觸發。 但是在這種情況下,我只希望觸發RegularExpressionValidator消息。 我不想觸發CompareValidator消息。
因此,如何防止CompareValidator消息和RegularExpressionValidator消息同時觸發?
這是我需要解決的唯一小問題。
如果提供了建議的修復程序或語法解決方案,將很有幫助。
在DataBound控件( GridView
)中對單行的驗證非常棘手,而多次驗證則更加棘手。 CustomValidator
是一個鋒利的工具,可以結合任何或所有其他ASP.NET驗證器。 這是在GridView
使用CustomValidator
的方式。
//.aspx
<ItemTemplate>
<asp:TextBox ID ="txtQty" runat="server" Width="60px" Text='<%#Eval("Product_Quantity")%>' />
<asp:Button ID ="Button1" runat="server"
OnCommand="Quantity_Update_Command"
CommandArgument='<%#Eval("productid") %>' <%--some information. else it makes no sense --%>
ValidationGroup='<%# "UpdateQuantity"+Container.DisplayIndex.ToString() %>' <%--validation group must be unique for each row --%>
CommandName="Update" Text="Update" />
<asp:CustomValidator ID="valQty" runat="server"
ControlToValidate="txtQty"
ValidateEmptyText="true"
ClientValidationFunction="qty_validate" <%--javascript on client --%>
ValidationGroup='<%# "UpdateQuantity"+Container.DisplayIndex.ToString() %>' <%--validation group must be unique for each row --%>
OnServerValidate="valQty_ServerValidate" <%--never trust user input or JS validation --%>
>*</asp:CustomValidator>
</ItemTemplate>
自定義驗證從客戶端開始(如果可能)。
<script>
function qty_validate(sender, args) {
if (parseInt(args.Value) != args.Value) {
sender.innerHTML =
sender.errormessage = 'Numbers only but no decimals';
args.IsValid = false;
}
else if (parseInt(args.Value) <= 0) {
sender.innerHTML =
sender.errormessage = 'Must be greater than 0';
args.IsValid = false;
}
}
</script>
但這還不夠。 永遠不要相信用戶輸入和客戶端(JS)驗證。
//.cs
protected void valQty_ServerValidate(object source, ServerValidateEventArgs args)
{
//repeat validation logic on the server
}
//extra: Call OnCommand handler instead of OnClick
//Here you can use e.CommandArgument unavailable in OnClick handler
protected void Quantity_Update_Command(object sender, CommandEventArgs e)
{
//update product using e.CommandArgument
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.