0

我有一个这样的 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;
    }
}

当我调试时,它会给出错误

对象引用未设置为对象的实例
Null Reference Exception was Unhandled by User

在线上

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

GetUserDetails功能。

4

2 回答 2

0

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

你确定那TLE.users.FirstOrDefault(x => x.email_add == uemail)是返回的东西吗?如果你在给出错误的行上放置一个断点,那么你可以检查它的值userDetails是什么——它可能是空的。

于 2012-04-27T23:28:06.937 回答
0

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

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

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

对于引用类型(您的引用类型),默认值为null. 所以这个调用会导致这个异常:

userDetails.cellno.Trim();

既然如此userDetails,它就null无法访问cellno属性,因此出现异常。

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

如果userDetailsnull,请检查您的查询条件。也许users收藏中什么都没有?也许没有符合您x.email_add == uemail条件的记录?(这很可能。)

如果cellno是,null那么您将要检查该对象的构建方式、数据库中的数据是什么样的等等。无论哪种方式,您都无法取回您期望的数据。问题在于您正在访问的数据。

于 2012-04-27T23:29:14.647 回答