【问题标题】:Invalidate Page via JavaScript通过 JavaScript 使页面无效
【发布时间】:2011-02-14 15:15:09
【问题描述】:

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

【问题讨论】:

  • 你能解释一下'使页面无效'的意思吗?或者举个例子。 .
  • 当您的表单元素之一“无效”时,用户无法提交表单。这是使用 ASP.NET 验证控件自动处理的。我想从我的 AJAX 函数中挂钩这个功能。
  • 不是让页面失效,而是让页面中的提交按钮失效就够了吗?

标签: javascript asp.net validation


【解决方案1】:

This link 提供了对 ASP.Net 验证的深入解释。向下滚动到“客户端 API”段落,它解释了您可以设置 Page_IsValid 变量。但请注意,无法保证此 API 在未来版本的 .NET 中保持不变,因此请检查是否存在 Page_IsValid。

编辑:

对不起,在我之前的评论中,我有点着急,我只是回答了你的问题,没有看大局。我只是重读了您的问题,实际上,它什么也没做,因为当您用户单击提交按钮时,它会触发对所有验证器的重新验证。因为文本框用户名有一个值,所以您的 requiredvalidator 是有效的并且表单提交。

我认为从长远来看更好的解决方案(并且不直接调用 .NET 的 javascript 函数的解决方案)如下:

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

这有点绕道,但它是面向未来的,而且比弄清楚如何使用 .NET 验证器框架的 javascript 函数更容易。

【讨论】:

  • 谢谢。但是如何在上面的 javascript 函数中使用 Page_IsValid 对象?
  • 在你的成功回调函数中,使用 'if (typeof Page_IsValid != 'undefined') { Page_IsValid = false; }' 我认为它应该可以工作,但我不确定(我目前无法检查)。
  • 是的,我尝试手动设置 Page_IsValid,但它什么也没做
  • Post 中的链接不再有效。但要点就在这里。 :)
  • @winner_joiner 我修复了链接(& 2 个拼写错误)。感谢您通知我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 2019-11-20
  • 2015-11-29
  • 1970-01-01
相关资源
最近更新 更多