我有一个包含多个验证器控件的注册表单。我正在通过以下方式检查用户名可用性 AJAX(使用 jQuery,而不是 UpdatePanel)。如果用户名被占用,我想让页面无效,就像其他 ASP.NET 验证器从我的 JavaScript 函数中所做的那样。这可能吗?例子?
这是我当前的功能:
// In head...
<script type="text/javascript">
$(document).ready(function () {
$('#<%= username.ClientID %>').blur(function () {
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: 'MyService.asmx/CheckAvailability',
dataType: 'json',
data: '{ "username": "' + username + '" }',
success: function (response) {
// stuff
// If username is taken, invalidate
}, error: function () { /* stuff */ }
});
});
});
</script>
// The markup...
<dl><dt>Username</dt>
<dd>
<asp:textbox id="username" runat="server" />
<asp:requiredfieldvalidator id="usernameRequiredValidator" runat="server"
controltovalidate="username"
errormessage="Required"
display="Dynamic" />
<span id="avail_response"></span>
<!-- More stuff... -->
最佳答案
This link提供了对 ASP.Net 验证的深入解释。向下滚动到“客户端 API”段落,其中说明您可以设置 Page_IsValid 变量。但是请注意,不能保证此 API 在未来的 .NET 版本中保持不变,因此请检查 Page_IsValid 是否存在。
编辑:
抱歉,在我之前的评论中,我有点匆忙,我只是回答了你的问题,没有考虑大局。我刚刚重读了您的问题,实际上,它什么也做不了,因为当您的用户单击提交按钮时,它会触发所有验证器的重新验证。因为文本框用户名有一个值,所以您的 requiredvalidator 有效并且表单提交。
我认为从长远来看,更好的解决方案(以及不直接调用 .NET 的 javascript 函数的解决方案)如下:
- 添加隐藏字段
- 为隐藏的字段创建一个 requiredfieldvalidator 领域
- 将 requiredfieldvalidator 放在第一个 requiredvalidator 后面,并给它与 requiredvalidator 相同的错误消息
- 在隐藏字段中放置一些值 你的成功函数如果 用户名可用,在所有其他 情况下,将隐藏字段设为空。
这有点绕了弯路,但它是 future 的证明,而且比弄清楚如何使用 .NET 验证器框架的 javascript 函数更容易。
关于javascript - 通过 JavaScript 使页面无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993800/