asp.net MVC 3错误:“对象引用未设置为对象的实例”

时间:2012-04-27 23:22:17

标签: asp.net-mvc asp.net-mvc-3

我有像这样的AccountController

public class AccountController : Controller
{
    [Authorize]
    public ActionResult MyProfile(string userEmail)
    {
        UserManager um = new UserManager();
        UserProfile user = new UserProfile();
        user = um.GetUserDetail(userEmail);
        return View(user);
    } 
 }

我是UserManager.cs就像这样

public class UserManager
{
    private ToLetDBEntities TLE = new ToLetDBEntities();
     public UserProfile GetUserDetail(string uemail)
    {
        var userDetails = TLE.users.FirstOrDefault(x => x.email_add == uemail);

        UserProfile up = new UserProfile();
        up.cellno = userDetails.cellno.Trim();
        up.email_add = userDetails.email_add.Trim();
        up.name = userDetails.name.Trim();
        up.password = userDetails.password.Trim();

        return up;
    }
}

当我调试它时会出现错误,如

  

对象引用未设置为对象的实例
  用户未处理空引用异常

up.cellno=userDetails.cellno.Trim(); 

GetUserDetails函数。

2 个答案:

答案 0 :(得分:0)

该错误表明您没有userDetails个实例,因此无法获取cellno属性。

您确定TLE.users.FirstOrDefault(x => x.email_add == uemail)正在返回某些内容吗?如果在提供错误的行上放置断点,那么您可以检查userDetails的值是什么 - 它可能为空。

答案 1 :(得分:0)

这个查询很可能没有返回任何内容:

TLE.users.FirstOrDefault(x => x.email_add == uemail);

如果没有返回记录,FirstOrDefault方法将不会给出任何类型的指示。 OrDefault部分指定了此行为。对于任何给定的返回类型,如果没有找到记录,它将返回该类型的“默认”。

对于参考类型(您的参考类型),默认值为null。因此,此调用将导致完全异常:

userDetails.cellno.Trim();

由于userDetailsnull,因此无法访问cellno属性,因此例外。

在你的情况下可能userDetails 不是 null,但它上面的cellno属性。它不太可能,但可能。在调试时查看运行时值会告诉您是否是这种情况。

如果userDetailsnull,请检查您的查询条件。也许users集合中没有任何内容?也许没有符合您x.email_add == uemail条件的记录? (这很可能。)

如果cellnonull,那么您将需要检查该对象的构建方式,数据库中的数据是什么样的等等。无论哪种方式,您都无法获取数据你期待。问题出在您正在访问的数据中。