最近一段時間在緊跟一個網站的項目,數據庫中用戶表的UserName要求是唯一的,所以當用戶選定一個用戶名進行注冊時要首先檢查該用戶名是否已被占用,並給出提示。起初的實現是:用戶填寫完注冊表單提交后,在后台進行驗證。但看到很多網站的設計是當用戶填寫完用戶名,TextBox失去焦點后就會立即給出提示,比如https://passport.csdn.net/account/register,反應很迅速,應該是在前台進行檢查的。今天花了些時間針對這一點查了一些資料。
js調用后台C#函數檢測用戶名時需要獲取用戶輸入的用戶名,然后檢查數據庫中是否已含有該用戶名:
傳遞參數的方法,有的(http://www.cnblogs.com/morningwang/archive/2008/04/07/1140340.html)采用如下方法:
//后台
protected string CsharpVoid(string strCC)
{
strCC = "你好!" + strCC;
return strCC;
}
//前台
function Init()
{
var v = "中國";
var s = '<%=CsharpVoid("'+v+'") %>';
alert(s);
}
我進行了嘗試,結果並不如人所願。后來絕決定使用Ajax來實現。由於之前了解的甚少,所以整個過程也走了不少彎路,幸運的是最后還是給弄出來了。具體實現步驟如下:
1.bin目錄下添加引用:AjaxPro.2.dll
並在后台Codefile中並添加using AjaxPro;
2.Web.config 中<system.webServer>里的<handlers>下添加,以下內容:
<add name="AjaxPro" verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
3.Site.master的aspx文件中的<asp:ScriptManager> 添加 ,EnablePageMethods="true"。
4.使用方法:
1)類前添加:[AjaxNamespace("ANSP")](修改命名空間名稱,可略過)
[AjaxNamespace("ANSP")]
public partial class Physician_WUC_PhysicianInfor : System.Web.UI.UserControl
{
}
2)Page_Load
protected void Page_Load(object sender, EventArgs e)
{
lca_dataservice = new lca_database_service.lca_database_service();
Utility.RegisterTypeForAjax(typeof(Physician_WUC_PhysicianInfor));
}
3)要調用的方法前添加:[AjaxPro.AjaxMethod]
[AjaxPro.AjaxMethod]
public bool CheckUsernameExist(string username)
{
bool NotExist = false;
try
{
System.Data.DataSet ds = lca_dataservice.readDoctor(username);
if (ds == null || ds.Tables[0].Rows.Count <= 0)
{
NotExist = true;
}
}
catch (Exception ex)
{
NotExist = false;
}
return NotExist;
}
4)前台js調用方法:
var Exist = ANSP.CheckUsernameExist(userName).value;
Exist為函數返回值。
if(Exist==true)
{
//用戶名不存在
}else
{
//用戶名存在
}
經過以上設置,算是達到了預想的要求。