我使用asp.net MVC 4和jQuery 1.9.1来检查用户在文本字段中输入用户名时的用户名可用性。由于某种原因,我在浏览器控制台中获得了Internal Server Error 500
。
下面是我的代码:
控制器
[HttpPost]
public JsonResult chkPrevUser(string username)
{
var prevUser = rentdb.Regs.Where(p => p.username == username).FirstOrDefault();
if (prevUser.username == username)
{
return Json(false);
}
else
{
return Json(true);
}
}
字符串
查看
<script>
$(function () {
$("#txtUsername").keyup(function () {
var name = $("#txtUsername").val();
var status = $("#userStatus");
var user = $.trim(name);
if (user.length > 3) {
status.html("Checking....")
$.post("/Home/chkPrevUser", { username: name },
function (data) {
if (data == true) {
status.html("<font color=green>'<b>" + name + "</b>' is available!</font>");
} else {
status.html("<font color=red>'<b>" + name + "</b>' is not available!</font>");
}
});
} else {
status.html("Need more characters...");
}
});
});
</script>
@using (Html.BeginForm("Register", "Home"))
{
@Html.TextBoxFor(a => a.username, new { id = "txtUsername" })
@Html.ValidationMessageFor(a => a.username)
}
型
我的代码有问题吗?我如何解决这个问题,并检查是否用户名已经存在的 AJAX ?
3条答案
按热度按时间kfgdxczn1#
抛出
500 (Internal Server Error)
是因为您的查询字符串
将返回
null
,但未找到匹配项,因此下面的代码行型
将抛出
NullReferenceException
,因为您无法访问null
的username
属性将代码更改为
型
但是,我建议您删除脚本,改为使用
RemoteAttribute
,它将应用于您的属性,如型
控制器方法只需要更改为
[HttpGet]
,并更改返回语句以添加JsonRequestBehavior.AllowGet
参数(例如return Json(true, JsonRequestBehavior.AllowGet);
)。有关详细信息,请参阅How to: Implement Remote Validation in ASP.NET MVC如果您选择保留您的脚本,我建议您做以下更改
1.处理
.change()
事件而不是.keyup()
。目前,如果用户试图输入10个字符的用户名,则会在第4至第9个字符处对服务器进行不必要的调用,这将返回恼人且无意义的错误消息。注意,RemoteAttribute
最初处理.change()
事件(即直到用户从文本框中跳出来才执行验证),如果无效,则在用户进行编辑时处理.keyup()
事件。1.使用
'@Url.Action("chkPrevUser", "Home")'
而不是"/Home/chkPrevUser"
来确保您的url始终正确生成b1zrtrql2#
服务器错误500意味着服务器在大多数情况下抛出异常。调试您的方法并查看导致异常的原因。
r6vfmomb3#
[Remote]属性应该在这方面发挥作用。尝试这些步骤,它适用于我的应用程序。
1)模型文件夹中的视图模型类
字符串
2)在用户控制器中创建这2个操作。
型
3)使用UserVM类模型创建新视图“注册”。
现在,尝试,你会看到错误,只要你标签从用户名字段在注册表单.