其实实现的功能很简单,就是在注册用户的时候通过ajax异步的方式去数据库中判断是否存在相同的记录(这里提醒下,后台也要验证,不然会出现意想不到的后果,我的项目已经有过惨痛的教训了,数据表中存在N条相同的记录,但是原因还不大清楚。)
ASPxCallbackPanel实现起来好像比。net原生的控件稍微复杂那么一点点,不过也还算好用吧。我需要异步操作的控件包裹在ASPxCallbackPanel中:
[HTML] 纯文本查看 复制代码 <dx:ASPxCallbackPanel runat="server"
ID="ASPxCallbackPanel" ClientInstanceName="ASPxCallbackPanel">
<PanelCollection>
<dx:PanelContent runat="server">
<table>
<tr>
<td>
<dx:ASPxTextBox EnableClientSideAPI="True" runat="server"
ClientInstanceName="txtLoginName" CssClass="Page_Input" ID="txtLoginName" NullText="请输入登录用户名">
<ValidationSettings>
<RequiredField ErrorText="登录名称不能为空" IsRequired="True"></RequiredField>
</ValidationSettings>
<ClientSideEvents ValueChanged="function(s,e){
if(txtLoginName.GetText()!=null){
ASPxCallbackPanel.PerformCallback(txtLoginName.GetText().toString());
e.processOnServer=false;
}
}" />
</dx:ASPxTextBox>
</td>
<td style="text-align:left;">
<dx:ASPxLabel ForeColor="Red" runat="server" ID="lbErrorText" ClientInstanceName="lbErrorText"></dx:ASPxLabel>
</td>
</tr>
</table>
</dx:PanelContent>
</PanelCollection>
</dx:ASPxCallbackPanel>
我这里就是操作一个aspxtextbox 和一个 aspxlabel ,方式就是当aspxtextbox 中的文本变化时去异步查询,然后消息在aspxlabel 中显示。
这里面首先用脚本判断了下是否可以获取控件中的值,如果为空则不触发异步。
相应的后台代码:
[C#] 纯文本查看 复制代码 protected void ASPxCallbackPanel_OnCallback(object sender, CallbackEventArgsBase e)
{
if (BLL.SysUser.GetInstance().ExistsSysUesrByLoginName(e.Parameter))
{
lbErrorText.Text = "用户名在系统中已经存在,请更换";
}
}
大概的意思就是这样,实现起来也不算难,但是效果还是不错的。
|