Asp.net mvc 4 变量具有空值

Asp.net mvc 4 变量具有空值,asp.net-mvc-4,Asp.net Mvc 4,我有一个按钮,当我点击它时,我得到一个System.NullReferenceException:对象引用未设置为对象的实例。在下面的一行:user.isBaned=true 来自按钮的用户名字段具有值。但用户没有价值。我不知道为什么 控制器: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Ban(string username) { var user = db.Users.Find(username); i

我有一个按钮,当我点击它时,我得到一个
System.NullReferenceException:对象引用未设置为对象的实例。
在下面的一行:
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" />
}
@使用(Html.BeginForm(“Ban”、“Admin”、FormMethod.Post、new{enctype=“multipart/formdata”}))
{
@Html.AntiForgeryToken();
}

代码中的实际问题是,查找用户的方法返回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有一个值。它们是两个不同的东西,username是传递给函数的字符串,其中as user是将在系统中找到的用户。拥有一个有效的用户名并不总是意味着用户也是有效的。我建议您去检查
User.Find(string)返回的方法值方法。它会给你答案

显示按钮单击的代码,是Html.ActionLink帮助程序吗?不是,实际的问题可能是没有返回用户,用户仍然为空。不是用户名变量有值。@DimitarGanichev,它们是两个不同的东西。用户名是一个参数,而用户是在系统中找到的对象。用户依赖于用户名,但用户名似乎并不总是确保会有用户。请参阅我对此问题的回答。我建议使用public ActionResult Ban(FormCollection collection)作为参数,而不是username参数,并通过集合[“username”]获取用户名的值,然后调试检查出现的任何值,最重要的是检查user的null(user!=null),因为该用户在数据库中不可用