2014-12-26 48 views
0

我有按钮,当我点击它时,我在下面的行上得到一个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

显示按钮点击的代码,它是Html.ActionLink助手吗? – unique

+1

不,实际的问题可能是没有用户返回并且用户仍为空。 –

+0

没有用户名变量有值。 –

回答

0

在你的代码中实际的问题是,该方法找到了用户,返回一个空(因为用户可能不被发现) 。

只是为了确保这个错误不会再次抛出,你可以将代码块包装在一个简单的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是传递给函数的字符串,其中as用户是在系统中找到的用户。拥有有效的用户名,并不总是意味着用户也将有效。我想建议您去检查由User.Find(string);方法返回的方法值。它会给你答案。