我有按钮,当我点击它时,我会在以下行显示System.NullReferenceException: Object reference not set to an instance of an object.
:user.isBaned = true;
来自按钮的用户名字段具有值。但是用户没有价值。我不知道为什么?
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Ban(string username)
{
var user = db.Users.Find(username);
if (ModelState.IsValid)
{
user.isBaned = true;
//db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return Redirect("/Admin/Index");
}
return Redirect("/Admin/Index");
}
查看:
@using(Html.BeginForm("Ban" , "Admin", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken();
<input type="hidden" value="@item.UserName" name="username" />
<input type="submit" id="username" value="Ban" class="btn-default" />
}
答案 0 :(得分:0)
代码中的实际问题是找到用户的方法是返回null(因为可能找不到用户)。
为了确保不会再次抛出此错误,您可以将代码块包装在一个简单的if else块中。像这样的东西,
if(user != null) {
// if the user is not null
if (ModelState.IsValid)
{
user.isBaned = true;
//db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return Redirect("/Admin/Index");
}
}
此外,正如您所说,用户名具有值。它们是两个不同的东西,username是传递给函数的字符串,其中用户是将在系统中找到的用户。拥有有效的用户名,并不总是意味着用户也是有效的。我建议你去检查User.Find(string);
方法返回的方法值。它会给你答案。