2011-02-14 47 views
1

我有一个注册表单,带有多个验证器控件。我通过 AJAX(使用jQuery,而不是UpdatePanel)来验证用户名可用性。如果使用用户名,我想让页面无效,就像其他ASP.NET验证器从我的JavaScript函数中执行的那样。这可能吗?例子?通过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... --> 
+3

您能否解释一下您的意思是“使页面无效”? 或者举个例子。 。 – 2011-02-14 15:16:27

+0

当您的某个表单元素为“无效”时,用户无法提交表单。这是使用ASP.NET验证控件自动处理的。我想从我的AJAX函数中钩住这个功能。 – Didaxis 2011-02-14 15:18:32

回答

2

This link提供ASP.Net验证了深入的解释。向下滚动到“客户端API”段落,在该段落中说明您可以设置Page_IsValid变量。但是,要警告的是,不能保证这个API在将来的.NET版本中保持不变,所以请检查Page_IsValid是否存在。

编辑:

对不起,我在以前的评论我是有点过了赶时间,我刚才已经回答了你的问题不看大局。我刚刚重读了你的问题,事实上,它什么也不做,因为当你点击提交按钮时,它会触发所有验证器的重新验证。由于文本框的用户名有一个值,您的requiredvalidator有效并且表单提交。

我认为,从长远来看,(和一个不直接调用.NET的JavaScript函数)一个更好的解决方案如下:

  1. 添加一个隐藏字段
  2. 创建一个RequiredFieldValidator隐藏的 场
  3. 放置的RequiredFieldValidator背后的第一requiredvalidator,并给它相同的ErrorMessage作为requiredvalidator
  4. 将在隐藏领域的一些价值 您成功功能,如果 用户名可用,在所有其他 的情况下,使隐藏字段为空。

这是一个绕道而行,但它的未来证明&比找出如何使用.NET验证框架的JavaScript函数更容易。