【问题标题】:Check if username exists in a asp.net form检查用户名是否存在于 asp.net 表单中
【发布时间】:2011-08-05 03:02:13
【问题描述】:

我目前正在用 asp.net 和 c# 创建一个注册表单。我想要做的是允许用户输入用户名,当他们从文本框中删除焦点时,它会检查 mysql 数据库以查看用户名是否存在。如果是这样,则会显示一个 css 容器以通知用户该用户名已被使用。

我尝试使用 Javascript/JQuery 来隐藏运行良好的 CSS 容器。我的计划是在文本框上运行 textchanged 事件,然后如果此函数返回 true,则使用 javascript/jquery 重新显示 css 容器。但是,我发现要使用文本更改事件,我需要在该字段上启用自动回发,这也意味着表单刷新并尝试提交表单,因此阻止了我的计划。

编辑 响应 sfomate 关于使用更新面板的问题。我已经使用表单中的以下代码段尝试了这种方法

   <asp:ScriptManager ID="scriptManager" runat="server" />
    <asp:UpdatePanel runat="server" ID="userUpdate" UpdateMode="Conditional">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="txtUsername" EventName="TextChanged" />
  </Triggers>
   <ContentTemplate>
    <asp:TextBox id="txtUsername" TextMode="SingleLine" required 
          placeholder="Username" runat="server" 
         ontextchanged="txtUsername_TextChanged" AutoPostBack="True" />
         <span class="tooltip">Please enter your username</span>
     <span class="fieldExists">Username exists</span>
   </ContentTemplate>
</asp:UpdatePanel>

当文本框使用文本更改事件失去焦点时,这将停止整个页面的自动回发。但是,我添加的 Response.Write() 代码并没有向页面添加任何内容。我曾尝试仅打印 hello world 或使用 Javascript 显示 css 容器,但在文本框失去焦点后似乎没有立即显示。但是,当我单击提交按钮时,会显示 response.write() 这不是我想要的。

感谢您的帮助。

【问题讨论】:

  • 顺便说一句,请使用“ASP.NET”标签,而不是“ASP”
  • 仅供参考:请注意,这不会阻止重复插入。在您检查名称和插入名称之间,总是有可能另一个用户正在检查并插入相同的名称。您仍然需要处理重复的插入异常。

标签: c# asp.net


【解决方案1】:

您可以使用 Updatepanel 表单 asp.net Ajax 工具包来防止回发。或者,您可以使用 JQuery 进行 AJAX 并获得 JSON 响应。

【讨论】:

    【解决方案2】:

    所以简短的版本是这样的:

    ASP.NET WebForms 通常不 ajax。这不是他们的设计目的。它们是为回发而设计的。因此,您需要从它们中删除操作的“ASP.NET”部分,并严格依赖于使用 AJAX 进行操作。

    因此,您需要一个 Web 服务目标来将“建议的用户名”传递给,您需要一个 javascript 方法来“当 change 发生时,通过 ajax 进行检查”和一个方法来“在 ajax 完成时,显示盒子”。

    webservice 部分可以是 ashx 或 asmx 或 svc 或 PageMethod(取决于您使用了多少其他 ASP.NET 东西)。它甚至可以是一个基于 GET 的 ASPX 页面(对于大多数开发人员来说,这太过分了,只需使用 asmx/ashx 概念)。

    这两种方法看起来像:

    function AjaxResult( response ) {
    }
    
    function AjaxCheck(event) {
      // do the $.ajax() here and on success call AjaxResult with the response
    }
    

    你会像这样将第二个绑定到文本框:

    <asp:TextBox ID="MyTextBox" runat="server" AutoPostBack="false" />
    <script type="javascript">
      $('#<%= MyTextBox.ClientID %>').change(AjaxCheck);
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多