javascript - 通过 JavaScript 使页面无效

标签 javascript asp.net validation

我有一个包含多个验证器控件的注册表单。我正在通过以下方式检查用户名可用性 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 函数的解决方案)如下:

  1. 添加隐藏字段
  2. 为隐藏的字段创建一个 requiredfieldvalidator 领域
  3. 将 requiredfieldvalidator 放在第一个 requiredvalidator 后面,并给它与 requiredvalidator 相同的错误消息
  4. 在隐藏字段中放置一些值 你的成功函数如果 用户名可用,在所有其他 情况下,将隐藏字段设为空。

这有点绕了弯路,但​​它是 future 的证明,而且比弄清楚如何使用 .NET 验证器框架的 javascript 函数更容易。

关于javascript - 通过 JavaScript 使页面无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993800/

相关文章:

asp.net - Intelligencia.UrlRewriter session 状态问题

scala - 映射和减少/折叠 scalaz.Validation 的 HList

javascript - 在另一个页面上调用 javascript 函数/按钮单击事件

javascript - 滚动悬停和文本跳跃

javascript - ASP.NET Pikaday 不适用于母版页

javascript - 将电话号码前缀的正则表达式限制为两个数字

java - 验证 Spring 服务层

javascript - 当我通过时,React useCallback 会做什么。第一个参数中的对象

javascript - Ctrl+单击 Atom 编辑器中的函数名称并跳转到其中

c# - Asp.Net Web API 未从 Angular 接收 Post 数据