我有像这样的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
函数。
答案 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();
由于userDetails
为null
,因此无法访问cellno
属性,因此例外。
在你的情况下可能,userDetails
不是 null
,但它上面的cellno
属性是。它不太可能,但可能。在调试时查看运行时值会告诉您是否是这种情况。
如果userDetails
为null
,请检查您的查询条件。也许users
集合中没有任何内容?也许没有符合您x.email_add == uemail
条件的记录? (这很可能。)
如果cellno
是null
,那么您将需要检查该对象的构建方式,数据库中的数据是什么样的等等。无论哪种方式,您都无法获取数据你期待。问题出在您正在访问的数据中。