gpt4 book ai didi

javascript - ASP.NET CustomValidator 不工作,始终返回 True

转载 作者:行者123 更新时间:2023-12-03 09:11:42 25 4
gpt4 key购买 nike

我正在尝试使用自定义验证器来验证两个下拉列表。这是我的代码:

  <script type="text/javascript">

function customValidation(sender, eventArgs)
{

var customValidator = document.getElementById('<%=customValidator.ClientID%>');
var ddl1 = document.getElementById('<%=ddl1.ClientID%>');
var ddl2 = document.getElementById('<%=ddl2.ClientID%>');

if (ddl1.selectedIndex > 2 && ddl2.selectedIndex == 1)
{

customValidator.isvalid = false;
ValidatorUpdateDisplay(customValidator);
return false;

}
else
{

customValidator.isvalid = true;
ValidatorUpdateDisplay(customValidator);
return true;

}

}

</script>

<form id="form1" runat="server">

<asp:DropDownList ID="ddl1" runat="server">

<asp:ListItem Selected="True" Value="0">--Select--</asp:ListItem>
<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="2">2</asp:ListItem>
<asp:ListItem Value="3">3</asp:ListItem>
<asp:ListItem Value="4">4</asp:ListItem>
<asp:ListItem Value="5">5</asp:ListItem>

</asp:DropDownList>

<asp:DropDownList ID="ddl2" runat="server">

<asp:ListItem Selected="True" Value="0">--Select--</asp:ListItem>
<asp:ListItem Value="1">A</asp:ListItem>
<asp:ListItem Value="2">B</asp:ListItem>
<asp:ListItem Value="3">C</asp:ListItem>
<asp:ListItem Value="4">D</asp:ListItem>
<asp:ListItem Value="5">E</asp:ListItem>

</asp:DropDownList>

<asp:CustomValidator ID="customValidator" runat="server" ClientValidationFunction="customValidation" ErrorMessage="Error." Display="Dynamic" />

</form>

仅当用户在第一个下拉列表中选择大于 2 的索引,然后在第二个下拉列表中选择“A”时,验证器才会失败。我试图避免回发,所以我没有服务器验证功能。我认为这并不重要,因为如果验证器失败,那么它将不允许任何提交按钮工作。

问题是它不起作用。即使验证仅返回 true 或 false,它似乎也没有改变任何内容。我一直在使用 Chrome 的检查元素来跟踪 Javascript 执行,并且发现了一些有趣的东西。

为了测试它,我尝试选择应返回 false 的选项。我看到它通过了验证函数,并且逻辑运行良好。当 ValidatorUpdateDisplay 被调用时,它确实显示了自定义验证器的错误消息。

但是我看到执行是在 ValidatorValidate() 中。然后它调用这个函数:

val.isvalid = val.evaluationfunction(val);

这会将 val.isvalid 重置为 true,即使我之前将其设置为 false。

然后它调用 ValidatorUpdateDisplay 并且验证器再次变得不可见。

我不知道为什么会调用 ValidatorValidate(),但既然是这样,为什么不调用自定义验证函数呢?我看不出它在哪里是正确的。

编辑:我心软并添加了服务器端方法。它查看相同的下拉列表并执行与以前相同的逻辑。但现在它被正确显示为无效。当然,这是在回发之后发生的,我真的不希望这样。

如何才能在客户端正确验证此内容?每次执行验证时,都会正确一次,然后由于某种原因再次调用,并且始终返回 true。它动态地消失得很好,再次让我相信这总是返回 true。

最佳答案

快速浏览文档

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.clientvalidationfunction(v=vs.110).aspx

看起来他们修改了作为参数传递给验证方法的参数对象的 isValid 属性。

您确定通过从方法返回值来设置验证结果吗?

关于javascript - ASP.NET CustomValidator 不工作,始终返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32059125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com