我目前正在asp.net和c#中创建一个注册表单。我希望能够做的是允许用户输入用户名,当他们从文本框中删除焦点时,它会检查mysql数据库以查看用户名是否存在。如果是,则显示css容器以通知用户已经使用了用户名。
我试图使用Javascript / JQuery隐藏工作正常的CSS容器。我的计划是在文本框上运行textchanged事件,然后如果此函数返回true,则使用javascript / jquery重新显示css容器。但是,我发现要使用文本更改事件,我需要在字段上启用autopostback,这也意味着表单刷新并尝试提交表单,从而阻止我的计划工作。
修改 响应有关使用更新面板的情况。我使用表单
中的以下代码段尝试了此方法 <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()代码没有添加任何内容。我试图打印你好世界或使用Javascript显示css容器但似乎没有任何东西似乎在文本框失去焦点后直接显示。但是,当我单击提交按钮时,会显示response.write(),这不是我想要的。
感谢您的帮助。
答案 0 :(得分:1)
您可以使用Updatepanel表单asp.net Ajax工具包来防止回发。或者你可以使用JQuery进行AJAX并获得JSON响应。
答案 1 :(得分:0)
所以短版本是这样的:
ASP.NET WebForms通常不会执行 ajax。这不是他们的设计目标。它们是专为回发而设计的。所以你需要从它们中删除动作的“ASP.NET”部分,并严格依赖 来处理AJAX。
所以你需要一个web服务目标来传递“建议的用户名”,你需要一个javascript方法来“当更改发生时,通过ajax检查”和一个方法“on ajax complete,display框”。
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>