如何在asp.net中使用ajax检查用户名是否已经存在?

时间:2012-01-07 05:39:08

标签: asp.net-mvc razor asp.net-ajax

我正在处理一个有注册表的应用程序,我必须向用户显示用户名是否存在。 我正在使用asp.net mvc3并计划使用AJAX来实现这一目标。

我有一张表格

<tr>
<td>User Name*</td>
<td><input id="UserName" name="UserName" type="text" onblur="check(this.value);"/></td>
<td id= "UName"></td>
</tr>

调用具有后续内容的.js文件

function check(User) {
    ...
    var url = "/UserNameCheck/Index";
    url += "?User=" + User;
    xmlHttp.onreadystatechange = state_Change;
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
}
function state_Change() {
    if (xmlhttp.readyState == 4) {// 4 = "Response loaded"

        if (xmlhttp.status == 200) {// 200 = Response Error Free               
            document.getElementById("UName").innerHTML = xmlHttp.responseText
        }
        else {
            alert("Problem retrieving XML data");
        }
    }
}

我提醒了用户名,我得到的是我输入的正确值。现在,URL是/ UserNameCheck / Index,其中UserNameCheck是一个控制器,而Index是一个方法。

控制器有此代码。

public ActionResult Index(string User)
        {
            string UserName;
            try
            {
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                UserName = Request.QueryString["User"];
                ConnectionPackage.ConnectionClass cc = new ConnectionPackage.ConnectionClass();
                conn = cc.con;
                string sql = "Select UserName FROM UserDetails where UserName = '" + UserName + "'";
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                cmd.CommandType = CommandType.Text;
                object p = cmd.ExecuteScalar();
                cmd.ExecuteNonQuery();
                string u = (string)p;
                if (u.Length==0 || u.Equals("NULL") || u.Equals("null")||u.Equals("Null"))
                {
                    return View();
                }

                return null;
            }
            catch (Exception ex){
            }

并且视图已

 String buffer = " <table><tr><td id = 'UName' >" This user name already exists. Please select some other unser name.
 buffer = buffer + "</td></tr></table>";
 response.getWriter().println(buffer);

我也尝试过写作

Response.Clear();
Response.Write("UserName already exists. Please select another UserName");
Response.End();

而不是返回View。 但在这两种情况下,即使我键入了数据库中已存在的用户名,我也没有得到用户名存在的任何消息。

连接字符串适用于插入数据库,因此我不认为存在问题。我在js文件中提到过的URL有问题吗?或者我的整个方法是错的? 我基本上是从java背景,所以不太了解asp.net。请帮忙。

非常感谢你。

2 个答案:

答案 0 :(得分:2)

我按照MSDN article How to: Implement Remote Validation in ASP.NET MVC

中的内容进行了操作

jQuery in Action是最受欢迎的jQuery书籍

答案 1 :(得分:1)

你做得很好但是你可以让自己变得更容易。如果你使用Razor使用MVC3,你的应用程序已经安装了jQuery。

  1. 使用$.ajax()方法执行对检查名称的控制器操作的调用...

  2. 绑定$ .ajax()调用“不显眼”,这意味着不是在HTML控件上,而是从jquery / javascript将事件绑定到您的控件。

  3. 其次,如果你想要一点花哨的性能,你可以通过live() jquery函数或keyup事件绑定它,这样当你输入ajax调用时就可以了找出实时的。

  4. 最终,您最终会减少javascript,并且您的JS内容将与您的标记完全分开。

    就你的控制器动作而言,它看起来很适合玩耍和学习,但是你想要考虑(a)将你的SQL语句作为存储过程放在数据库服务器上并调用它,或者(b)编写存储库模式类,然后使用LINQ在数据库提取后执行查询工作。

    另一种可能性是通过NuGet使用Entity Framework 4.1来消除这两种需求。它可以有一点学习曲线,但那里有很多好东西,你的例子开始时相当简单。

    如果您对代码有任何具体问题,请告诉我,我可以提供更详细的答案。