【发布时间】:2016-10-25 00:28:02
【问题描述】:
我是 Stackoverflow 的新手,我刚开始使用 .NET Core,也是我第一次使用身份。我基本上是在使用对控制器的 ajax 调用来查看用户名是否已经存在。然后我做了一些研究,发现我可以使用下面的RemoteAttribute是我的RegisterViewModel。
public class RegisterViewModel
{
[Required]
[StringLength(100, ErrorMessage = "some error", MinimumLength = 2)]
[DataType(DataType.Text)]
[Display(Name = "Username")]
[RegularExpression(@"(^[\w]+$)", ErrorMessage = "some error")]
[Remote("CheckUserName", "Account", HttpMethod = "POST", ErrorMessage = "some error")]
public string Username { get; set; }
然后在我的控制器中我有这个。
public async Task<JsonResult> CheckUserName(string username)
{
var user = db.Users.Where(x => x.UserName == username).FirstOrDefault();
if (user == null)
return Json(true);
else
return Json(false);
}
但我的 datacontext 总是抛出 Object Reference not set to an instance of an object,所以我使用了 FindByNameAsync Identity 方法,它总是返回 null,见下文。 p>
public async Task<JsonResult> CheckUserName(string username)
{
var user = await _userManager.FindByNameAsync(username);
//but user is always null ??
}
任何帮助将不胜感激。
【问题讨论】:
-
也许
string username需要是string Username? -
你是说参数
username的值是null?如果是这样,请查看生成表单控件的代码。 -
@StephenMuecke No FindByNameAsync 返回的值为空,所以
user -
那么这表明数据库中没有匹配
username的记录 -
Object Reference not set to an instance of an object你错过了这里的重点。null到底是什么?db还是db.Users?这可能只是这两个对象之一,因为如果集合为空,FirstOrDefault()不会引发异常。它会简单地返回null,正如您从代码中所知道的那样。所以很明显你的数据库有问题,而不是你搜索用户的方式。还要注意==将不匹配,如果你错误地有一个你没有看到的空间。
标签: c# asp.net-core asp.net-identity asp.net-core-mvc