当用户在文本字段中输入用户名时,我正在使用$(document).ready(function() {
$('label').click(function() {
$('label').removeClass('strong');
$('label').next('p').removeClass('strong');
$(this).next('p').addClass('strong');
$(this).addClass('strong');
});
});
和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);
}
}
我的代码中有什么问题吗?如何解决此问题并检查ajax是否已存在用户名?急需这个帮助!感谢。
答案 0 :(得分:1)
因为您的查询
而引发500 (Internal Server Error)
var prevUser = rentdb.Regs.Where(p => p.username == username).FirstOrDefault();
将返回找不到匹配项的null
,因此您的以下代码行
if (prevUser.username == username)
会抛出NullReferenceException
,因为您无法访问username
的{{1}}属性
将代码更改为
null
但是我建议你删除你的脚本,而是使用if (prevUser == null)
{
return Json(false);
}
else
{
return Json(true);
}
,它将作为
RemoteAttribute
只需将控制器方法更改为[Remote("chkPrevUser", ErrorMessage = "The user name already exists")]
public string username { get; set; }
,并将return语句更改为添加[HttpGet]
参数(例如JsonRequestBehavior.AllowGet
)。有关更多信息,请参阅How to: Implement Remote Validation in ASP.NET MVC
如果您选择保留脚本,我建议进行以下更改
处理return Json(true, JsonRequestBehavior.AllowGet);
事件而不是.change()
。目前如果
用户试图输入一个10个字符的用户名,一个
在4到9日对服务器进行不必要的调用
这些字符会返回一个恼人且毫无意义的错误
信息。请注意.keyup()
最初处理RemoteAttribute
事件(即在用户选中文本框之前不执行验证),如果其无效,则在用户进行处理时处理.change()
事件编辑。
使用.keyup()
代替
'@Url.Action("chkPrevUser", "Home")'
以确保您的网址始终正确无误
产生
答案 1 :(得分:0)
服务器错误500表示服务器在大多数情况下抛出异常。调试您的方法,看看导致异常的原因。
答案 2 :(得分:0)
[Remote]属性在此上应该像灵符一样工作。尝试这些步骤,它对我的应用程序有效。
1)模型文件夹中的Viewmodel类
[Remote("IsAlreadySigned", "User", HttpMethod = "POST", ErrorMessage = "Username already exists in database. Try another Username")]
public string Username { get; set; }
2)在用户控制器中创建这2个操作。
[HttpPost]
public JsonResult IsAlreadySigned(string Username)
{
return Json(IsUserAvailable(Username));
}
public bool IsUserAvailable(string UserN)
{
// Assume these details coming from database
List<UserVM> RegisterUsers = new List<UserVM>()
{
new UserVM {Username = UserN }
};
using (Db db = new Db())
{
var UserId = db.User.Where(x => x.Username == UserN).Select(x => new { UserN }).FirstOrDefault();
bool status;
if (UserId != null)
{
//Already registered
status = false;
}
else
{
//Available to use
status = true;
}
return status;
}
}
3)使用UserVM类Model创建新的视图“注册”。
现在,尝试一下,当您从“注册”表单的“用户名”字段中跳出时,就会看到错误。