【问题标题】:ASP.NET MVC4 lambda expression error - Object reference not set to an instance of an objectASP.NET MVC4 lambda 表达式错误 - 对象引用未设置为对象的实例
【发布时间】:2014-04-17 17:28:41
【问题描述】:

我在第 146 行不断收到此错误。如果有人向我解释此错误,我将不胜感激。


“/”应用程序中的服务器错误。

对象引用未设置为对象的实例。

说明:在执行当前网络请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详情:System.NullReferenceException:对象引用未设置为对象的实例。

来源错误:

Line 144:            var courses = dc.Courses.ToList().  
Line 145:                Where(course =>  
Line 146:                    course.   <------??????
Line 147:                    User. 
Line 148:                    Id ==   
Line 149:                    currentUserId);

源文件:c:\aaa\vat\c#\proj\igoryen\igoryen\ViewModels\Repo_Course.cs 行:146

堆栈跟踪:

[NullReferenceException: Object reference not set to an instance of an object.]
   igoryen.ViewModels.<>c__DisplayClassb.<getListOfCourseBaseAM>b__a(Course course) in c:\aaa\vat\c#\proj\igoryen\igoryen\ViewModels\Repo_Course.cs:146
   System.Linq.WhereListIterator`1.MoveNext() +56
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +381
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +58
   AutoMapper.Mappers.EnumerableMapperBase`1.Map(ResolutionContext context, IMappingEngineRunner mapper) +273
   AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +838

[AutoMapperMappingException: 

Mapping types:
WhereListIterator`1 -> IEnumerable`1
System.Linq.Enumerable+WhereListIterator`1[[igoryen.Models.Course, igoryen, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] -> System.Collections.Generic.IEnumerable`1[[igoryen.ViewModels.CourseBase, igoryen, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

Destination path:
IEnumerable`1

Source value:
System.Linq.Enumerable+WhereListIterator`1[igoryen.Models.Course]]
   AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context) +936
   AutoMapper.MappingEngine.Map(Object source, Type sourceType, Type destinationType, Action`1 opts) +196
   AutoMapper.MappingEngine.Map(Object source, Action`1 opts) +172
   AutoMapper.MappingEngine.Map(Object source) +121
   AutoMapper.Mapper.Map(Object source) +107
   igoryen.ViewModels.Repo_Course.getListOfCourseBaseAM(String currentUserId) in c:\aaa\vat\c#\proj\igoryen\igoryen\ViewModels\Repo_Course.cs:151
   igoryen.ViewModels.Repo_Course.getSelectListOfCourse(String currentUserId) in c:\aaa\vat\c#\proj\igoryen\igoryen\ViewModels\Repo_Course.cs:136
   igoryen.Controllers.CancellationsController.Create() in c:\aaa\vat\c#\proj\igoryen\igoryen\Controllers\CancellationsController.cs:50
   lambda_method(Closure , ControllerBase , Object[] ) +101
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +59
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +435
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +60
   System.Web.Mvc.Async.ActionInvocation.InvokeSynchronousActionMethod() +76
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__36(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +36
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3c() +117
   System.Web.Mvc.Async.<>c__DisplayClass45.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3e() +323
   System.Web.Mvc.Async.<>c__DisplayClass30.<BeginInvokeActionMethodWithFilters>b__2f(IAsyncResult asyncResult) +44
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50
   System.Web.Mvc.Async.<>c__DisplayClass28.<BeginInvokeAction>b__19() +72
   System.Web.Mvc.Async.<>c__DisplayClass1e.<BeginInvokeAction>b__1b(IAsyncResult asyncResult) +185
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(IAsyncResult asyncResult, ProcessRequestState innerState) +39
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +139
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +59
   System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +40
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9514928
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18446


更新 1

这就是我为用户准备的:

// 1) Peter teaches IPC144
Course c = new Course();  
c.CourseCode = "IPC144";  
c.CourseName = "Introduction into programming";  
c.RoomNumber = "1000";      
c.RunTime = "1000";  
c.Faculty = f;  
c.User = UserPeter; // 17  
f.Courses.Add(c); //  
c.Students.Add(bob);  
bob.Courses.Add(c);  
dc.Courses.Add(c);  
c = null;

更新 2

很遗憾,我无法在此处发布屏幕截图,但我正在使用断点进行调试,但我没有看到任何 null 的 User 值。


更新 3

我有这些文件:

  • Models/Initializer.cs 我在其中初始化所有列表/表格。
  • ViewModels/Repo_Course.cs 我有执行查询的方法(返回错误)。

我没有得到的部分是:
当我使用断点进行调试时,我看到:

  • 在Models/Initializer.cs 中,当Course 被初始化时,User 有一个值而不是null。
  • 但是在第 146 行的ViewModels/Repo_Course.cs 中(如上所示),User 是null!为什么???

更新 4

UserPeter 是ApplicationUser 类型:

var UserPeter = new ApplicationUser();
string userPw8 = "123456";
var userInfo8 = new MyUserInfo() { FirstName = "Peter", LastName = "Peterson" };
UserPeter.UserName = "Peter";
UserPeter.HomeTown = "Toronto";
UserPeter.MyUserInfo = userInfo8;
var UserPeterCreate = UserManager.Create(UserPeter, userPw8);
if (UserPeterCreate.Succeeded) {
    var addUserPeterToRole3Result = UserManager.AddToRole(UserPeter.Id, roleName3);
}

ApplicationUser类,它派生自IdentityUser:

public class ApplicationUser : IdentityUser {
    //[Key]
    //public int Id { get; set; }
    public string HomeTown { get; set; } 
    //public virtual ICollection<Cancellation> Cancellations { get; set; }
    //public virtual ICollection<Course> Courses { get; set; }
    public virtual MyUserInfo MyUserInfo { get; set; }
}

MyUserInfo 类

public class MyUserInfo {
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

IdentityUserclass(来自元数据):

public class IdentityUser : IUser {
    public IdentityUser();
    public IdentityUser(string userName);

    public virtual ICollection<IdentityUserClaim> Claims { get; }
    public virtual string Id { get; set; }
    public virtual ICollection<IdentityUserLogin> Logins { get; }
    public virtual string PasswordHash { get; set; }
    public virtual ICollection<IdentityUserRole> Roles { get; }
    public virtual string SecurityStamp { get; set; }
    public virtual string UserName { get; set; }
}

Course 类:

public class Course { // 10
  public Course() {
    this.Faculty = new Faculty();
    this.Students = new List<Student>();
  }
  [Key]
  public int CourseId { get; set; }
  public string CourseCode { get; set; }
  public string CourseName { get; set; }
  public string RoomNumber { get; set; }
  public string RunTime { get; set; }
  public Faculty Faculty { get; set; }
  public List<Student> Students { get; set; }
  public virtual ApplicationUser User { get; set; }
}

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-mvc-4 lambda object-reference


【解决方案1】:

您的 User 对象的列表中有一个值为 null。

【讨论】:

  • 感谢您的反馈!你能看看我的编辑 2 吗?
  • 这是我的问题。谢谢,@andrew-lewis!
【解决方案2】:

如果第 146 行进行 null 访问,则您的 courses 列表中包含 null 值的可能性要高于具有 null 用户的某些课程。

【讨论】:

  • 你能看看我的编辑3吗?
  • 在这种情况下,您可能需要发布更多源代码,例如UserPeter 的实际定义和 User 类的 Course 成员。
  • 非常感谢您的意见。你能看看我的更新 4 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2011-07-09
  • 2012-08-31
相关资源
最近更新 更多