2012-04-27 61 views
0

我一个的AccountController这样asp.net MVC 3错误: “对象引用不设置到对象的实例”

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; 
    } 
} 

当我调试它给像

Object reference not set to an instance of an object
Null Reference Exception was Unhandled by User

错误在这行

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

GetUserDetails函数。

回答

0

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

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

+0

是,为userDetails是null.can你帮我查询请... @LordSauce – 2012-04-27 23:38:20

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那么你会想要检查该对象是如何构建的,数据库中的数据是什么样的等等。无论哪种方式,你都没有找回你的数据期望。问题在于你正在访问的数据。

+0

感谢大卫。我已经将查询改为:var userDetails = TLE.users.Single(x => x.email_add == uemail);它给出了错误:“序列不包含任何元素” – 2012-04-27 23:48:44

+0

@AwladLiton:这意味着查询没有返回任何结果,因为我怀疑。看起来没有'users',其中'email_add'等于被传递给id的'uemail'值。你有没有检查数据,看看你正在寻找的记录是否存在? – David 2012-04-28 00:09:29