CustomValidator на стороне клиента не будет проверять
Почему этот CustomValidator на стороне клиента не проверяется? Когда веб-страница (1) запускается, CustomValidator игнорирует правила проверки и не отображает соответствующее сообщение в разделе ValidationSummary.
Валидатор должен выдать ошибку, когда txtTotalCost пусто.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<script language="javascript" type="text/javascript">
function ValidateTotalCost(source, arguments) {
if (arguments.length <= 0) {
arguments.isValid = false;
}
else {
arguments.isValid = true;
}
}
</script>
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" />
Order #
<asp:TextBox ID="txtOrderNumber" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="validateOrderNumber" runat="server"
ControlToValidate="txtOrderNumber" ErrorMessage="Please enter order number"
ToolTip="Please enter order nunmber">*</asp:RequiredFieldValidator>
<br />
<br />
Item ID
<asp:TextBox ID="txtItemID" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="validateItemID" runat="server"
ControlToValidate="txtItemID" ErrorMessage="Please enter item ID"
ToolTip="Please enter item ID">*</asp:RequiredFieldValidator>
<br />
<br />
Qty
<asp:TextBox ID="txtQty" runat="server"></asp:TextBox>
<asp:RangeValidator ID="validateQty" runat="server" ControlToValidate="txtQty"
ErrorMessage="Qty value range must be between 0 - 50" MaximumValue="50"
MinimumValue="0" ToolTip="Qty value range must be between 0 - 50">*</asp:RangeValidator>
<br />
<br />
Last Qty
<asp:TextBox ID="txtLastQty" runat="server" style="margin-left: 0px"></asp:TextBox>
<asp:CompareValidator ID="validateLastQty" runat="server"
ControlToCompare="txtQty" ControlToValidate="txtLastQty"
ErrorMessage="Qty and LastQty must match" ToolTip="Qty and LastQty must match">*</asp:CompareValidator>
<br />
<br />
Total
<asp:TextBox ID="txtTotalCost" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ControlToValidate="txtTotalCost"
ErrorMessage="Total cost must be filled out"
ClientValidationFunction="ValidateTotalCost"
ToolTip="Total cost must be filled out">*</asp:CustomValidator>
<br />
<br />
<asp:Button ID="btnOK" runat="server" Text="OK" />
<br />
</div>
</form>
</body>
</html>
2 ответа
"CustomValidator" будет срабатывать только тогда, когда TextBox не пуст. Если вы хотите проверить, является ли он пустым или нет, используйте "RequiredField Validator" вместе с "CustomValidator". Также исправление "IsValid", предложенное "Брайаном", абсолютно корректно.
Edit1:
Только что проверил, что мы можем использовать атрибут ValidateEmptyText="true" для пользовательского валидатора, чтобы избежать обязательного валидатора поля, как показано ниже
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtTotalCost" ValidateEmptyText="true"
ErrorMessage="Total cost must be filled out" ClientValidationFunction="ValidateTotalCost"
ToolTip="Total cost must be filled out">*</asp:CustomValidator>
Надеюсь это поможет!!
+ Изменить arguments.isValid
в arguments.IsValid
, У него должно быть заглавное "я".
РЕДАКТИРОВАТЬ: ТАКЖЕ, почему вы проверяете arguments.length? Я думаю, что вы хотите: arguments.Value.length
?
Проверьте этот ресурс: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.clientvalidationfunction.aspx