变量具有空值

时间:2014-12-26 10:46:42

标签: asp.net-mvc-4

我有按钮,当我点击它时,我会在以下行显示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" />
}

1 个答案:

答案 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);方法返回的方法值。它会给你答案。