我有一个必需的字段验证器来验证下拉列表。这个下拉列表是一个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>
答案 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();"