【问题标题】:How to check whether username already exists using ajax in asp.net?如何在asp.net中使用ajax检查用户名是否已经存在?
【发布时间】:2012-02-04 18:19:36
【问题描述】:

我正在开发一个具有注册表单的应用程序,我必须向用户显示用户名是否存在。 我正在使用 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();

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

连接字符串用于插入数据库,所以我认为没有问题。我在js文件中提到的URL有问题吗?还是我的整个方法都错了? 我基本上来自java背景,所以对asp.net不太了解。请帮忙。

非常感谢您。

【问题讨论】:

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


    【解决方案1】:

    你做得很好,但你可以让自己轻松很多。如果您在 Razor 中使用 MVC3,则您的应用程序已经安装了 jQuery。

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

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

    3. 其次,如果你想要一点花哨的性能,你可以通过live() jquery 函数或keyup 事件绑定它,这样你在打字的时候就会进行ajax 调用,你会发现它是实时的。

    最终您将使用更少的 javascript,并且您的 JS 内容将与您的标记完全分离。

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

    另一种可能性是通过 NuGet 使用 Entity Framework 4.1 来消除这两种需求。它可能有一些学习曲线,但那里有很多好东西,而且你的例子很容易上手。

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

    【讨论】:

    • 非常感谢。但老实说,我以前没有使用过 jQuery。你能推荐任何好的资源供我学习吗?如果里面也有实际的例子,那就太好了。再次非常感谢您。
    • @Sathya 从最有信誉的来源开始——它的所有者。 docs.jquery.com/Tutorials - 我想你会发现它很容易使用......当你完成一两个教程后......看看我提到的livekeyup 事件并在谷歌上搜索了几个例子。这是蛋糕。
    【解决方案2】:

    我遵循了MSDN article How to: Implement Remote Validation in ASP.NET MVC中给出的内容

    jQuery in Action 是最流行的 jQuery 书籍

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多