当autopostback下拉列表触发时,验证消息仍会显示

时间:2010-12-08 20:39:25

标签: asp.net drop-down-menu validation autopostback

我有一个必需的字段验证器来验证下拉列表。这个下拉列表是一个autopostback,它的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>

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

1)您可以设置

EnableClientScript="false"
验证器上的

,表示它在服务器上验证。

如果这有不良副作用(因为验证器被其他客户验证器“超越”),你可以这样做

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

function HideValidator() {

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

和ddl的事件处理程序:

onchange="HideValidator();"