4

我有一个必填字段验证器来验证下拉列表。这个下拉列表是一个自动回发,它的 causevalidation 属性设置为 false。

问题是,当我选择默认项目时,会显示验证消息,但仍然会进行回发。在回发之后,消息消失了。

这是代码片段:

<asp:RequiredFieldValidator ID="ContactMethodRequired" runat="server" ControlToValidate="ContactPreferences"
            Display="Dynamic" ErrorMessage="Please choose your contact method"
            EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator>
        <div>
            <asp:DropDownList ID="ContactPreferences" runat="server" AutoPostBack="true" CausesValidation="false">
                <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem>                         
                <asp:ListItem Text="Email" Value="Email"></asp:ListItem>
                <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem>
            </asp:DropDownList>
        </div>
4

3 回答 3

0

不知何故,验证器在这里混淆了一些东西。为了防止这种行为,有不同的方法:

1)您可以设置

EnableClientScript="false"

在验证器上,这意味着它在服务器上验证。

如果这有不希望的副作用(因为验证器被其他客户端验证器“取代”),你可以这样做

2) 将此 javascript/jquery-function 添加到页面:

function HideValidator() {

     var validator = $('#<%= ContactMethodRequired.ClientID %>');
     validator.hide();
}

和 ddl 的事件处理程序:

onchange="HideValidator();"
于 2012-07-04T11:05:13.750 回答
0

您在 HTML 元素的 onchange 事件中看到 WebForm_DoPostBackWithOptions 方法调用,还是 __doPostBack 方法调用?前者在执行回发之前调用 Page_ClientValidate(),您可以使用 JS 调试工具查看其所采用的路径。此外,由于它是默认验证组,是否有其他东西触发它?

于 2010-12-24T04:53:10.363 回答
0
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title> 
<script type="text/javascript" language="javascript" >
 function ValidPage() 
    {                             
       if (typeof(Page_ClientValidate) == 'function')  
       { 
            if (typeof (Page_ClientValidate) == 'function') { Page_ClientValidate();     }  
            if (!Page_IsValid) 
            {           

                return false;
            }                  
            return Page_IsValid; 
      } 
      return true;  
    } 

</script>
</head>
<body >
    <form id="form1" runat="server"  onsubmit="return ValidPage();"  >

        <div> 
            <asp:DropDownList ID="ContactPreferences" runat="server"       AutoPostBack="true"  CausesValidation="false"> 
                <asp:ListItem Text="Select" Value="" Selected="True"></asp:ListItem>  
                <asp:ListItem Text="Email" Value="Email" ></asp:ListItem> 
                <asp:ListItem Text="Phone" Value="Phone"></asp:ListItem> 
            </asp:DropDownList> 


            <asp:RequiredFieldValidator    ID="RequiredFieldValidator1" runat="server" ControlToValidate="ContactPreferences" 
            Display="Dynamic" ErrorMessage="Please choose your contact method" 
            EnableClientScript="true" InitialValue=""></asp:RequiredFieldValidator> 

        </div> 

    </form>
</body>
</html>
于 2010-12-08T22:28:55.087 回答