我正在处理一个有注册表的应用程序,我必须向用户显示用户名是否存在。 我正在使用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。请帮忙。
非常感谢你。
答案 0 :(得分:2)
我按照MSDN article How to: Implement Remote Validation in ASP.NET MVC
中的内容进行了操作jQuery in Action是最受欢迎的jQuery书籍
答案 1 :(得分:1)
你做得很好但是你可以让自己变得更容易。如果你使用Razor使用MVC3,你的应用程序已经安装了jQuery。
使用$.ajax()
方法执行对检查名称的控制器操作的调用...
绑定$ .ajax()调用“不显眼”,这意味着不是在HTML控件上,而是从jquery / javascript将事件绑定到您的控件。
其次,如果你想要一点花哨的性能,你可以通过live()
jquery函数或keyup
事件绑定它,这样当你输入ajax调用时就可以了找出实时的。
最终,您最终会减少javascript,并且您的JS内容将与您的标记完全分开。
就你的控制器动作而言,它看起来很适合玩耍和学习,但是你想要考虑(a)将你的SQL语句作为存储过程放在数据库服务器上并调用它,或者(b)编写存储库模式类,然后使用LINQ在数据库提取后执行查询工作。
另一种可能性是通过NuGet使用Entity Framework 4.1来消除这两种需求。它可以有一点学习曲线,但那里有很多好东西,你的例子开始时相当简单。
如果您对代码有任何具体问题,请告诉我,我可以提供更详细的答案。