ASP服务器端验证显示无效,客户端验证显示有效

ASP serverside validation shows not valid and clientside validation shows valid?

本文关键字:验证 显示 客户端 有效 无效 ASP 服务器端      更新时间:2023-09-26

当我点击按钮执行验证时,验证在服务器端正确发生,但同时我的客户端验证总是说页面是有效的,即使页面在服务器端无效。

<telerik:RadComboBox ID="PURSubAccounts" runat="server" Width="150" EmptyMessage=" ---" Font-Bold="true"></telerik:RadComboBox>
<asp:RequiredFieldValidator id="PurSubValidation" runat="server" ErrorMessage="!!!" Display="Dynamic" Font-Bold="true" Font-Italic="true" ForeColor="Red" InitialValue="" ControlToValidate="PURSubAccounts" EnableClientScript="true"></asp:RequiredFieldValidator>
<asp:Button ID="CreateButton" runat="server" CausesValidation="true" OnClick="CreateButton_Click" OnClientClick="ValidateME();" />
JavaScript

function ValidateME() {
        if (Page_IsValid) {
            alert("Valid");
        } else {
            alert("NOT Valid");
        }
}
<

VB代码/strong>

Protected Sub CreateButton_Click(sender As Object, e As EventArgs)
    If Page.IsValid Then
        msgbox("Valid")
    Else
        msgbox("NOT Valid")
    End If
End Sub

所以当我点击按钮时,vb消息框说"NOT Valid",客户端警告说"Valid",而我在requiredfieldvalidators上的错误消息正确显示。

我已经尝试使用Page_ClientValidate(),但这也返回true,而服务器端返回false。

如何使验证一致?

使用自定义验证器而不是必填字段验证器:

<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="validateCombo" ErrorMessage="You must select an item with even value" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>

客户端验证:

function validateCombo(source, args) 
{
    args.IsValid = false;
    var combo = $find("<%= RadComboBox1.ClientID %>");
    var text = combo.get_text();
    if (text.length < 1) 
    {
        args.IsValid = false;
    }
    else 
    {
        var node = combo.findItemByText(text);
        if (node) 
        {
            var value = node.get_value();
            if (value.length > 0 && value % 2 == 0) 
            {
                args.IsValid = true;
            }
        }
        else 
        {
            args.IsValid = false;
        }
    } 
  }

请尝试此服务器端验证,并让我知道它是否适用于您。

string selectedValue = RadComboBox1.SelectedValue;
   if (selectedValue != null && selectedValue.Length > 0)
   {
       try
       {
           int value = Convert.ToInt32(selectedValue);
           if (value % 2 == 0)
               args.IsValid = true;
           else
               args.IsValid = false;
       }
       catch (Exception ex)
       {
           args.IsValid = false;
       }            
   }
   else
       args.IsValid = false;