非静态方法需要一个目标

我有一个控制器的行动,在Firefox本地和生产,并在IE本地,但IE浏览器在生产工作正常。 这是我的控制器操作:

public ActionResult MNPurchase() { CalculationViewModel calculationViewModel = (CalculationViewModel)TempData["calculationViewModel"]; decimal OP = landTitleUnitOfWork.Sales.Find() .Where(x => x.Min >= calculationViewModel.SalesPrice) .FirstOrDefault() .OP; decimal MP = landTitleUnitOfWork.Sales.Find() .Where(x => x.Min >= calculationViewModel.MortgageAmount) .FirstOrDefault() .MP; calculationViewModel.LoanAmount = (OP + 100) - MP; calculationViewModel.LendersTitleInsurance = (calculationViewModel.LoanAmount + 850); return View(calculationViewModel); } 

这里是我在IE中获得的堆栈跟踪:

错误。 处理您的请求时发生错误。 System.Reflection.TargetException:非静态方法需要一个目标。 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object [] parameters,CultureInfo culture)在System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)System.Reflection.RuntimeMethodInfo.Invoke (System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue(MemberExpression me,Object instance)的System.Reflection.RuntimePropertyInfo.GetValue(Object obj,Object [] index)的BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo culture)在System.Data.Objects.ELinq.ELinqQueryState的System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter(Object []参数)System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath(expression式expression式,常量expression式和常量expression式)对象和成员值) .GetExecutionPlan(Nullable 1 forMergeOption) at System.Data.Objects.ObjectQuery 1.GetResults(Nullable 1 forMergeOption) at System.Data.Objects.ObjectQuery 1 forMergeOption) at System.Data.Objects.ObjectQuery 1.System.Collections.Generic.IEnumerable.GetEnumerator()at System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable 1 source) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable 1 source)at LandTitle.Controllers 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2参数)在Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget()在Castle.DynamicProxy.AbstractInvocation.Proceed()在Glimpse.Mvc3.Interceptor.InvokeActionMethodInterceptor.Intercept(IInvocation调用)在Castle.DynamicProxy.AbstractInvocation.Proceed ()在Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor (System.Web.Mvc.Async.AsyncControllerActionInvoker。)上的System.Web.Mvc.Async.AsyncControllerActionInvoker。<> c__DisplayClass37。<> c__DisplayClass39.b__33()at System.Web.Mvc.Async.AsyncControllerActionInvoker。<> c__DisplayClass4f.b__49()at System。 Web.Mvc.Async.AsyncControllerActionInvoker。<> c__DisplayClass37.b__36(IAsyncResult asyncResult)at System.Web.Mvc.Async.AsyncControllerActionInvoker。<> c__DisplayClass25。<> c__DisplayClass2a.b__20()at System.Web.Mvc.Async.AsyncControllerActionInvoker。 <> c__DisplayClass25.b__22(IAsyncResult asyncResult)

我觉得这个令人困惑的exception是在运行时使用一个空引用的lambda中的一个variables时发生的。 在你的情况,我会检查你的variablescomputeViewModel是一个空引用。

就像是:

 public ActionResult MNPurchase() { CalculationViewModel calculationViewModel = (CalculationViewModel)TempData["calculationViewModel"]; if (calculationViewModel != null) { decimal OP = landTitleUnitOfWork.Sales.Find() .Where(x => x.Min >= calculationViewModel.SalesPrice) .FirstOrDefault() .OP; decimal MP = landTitleUnitOfWork.Sales.Find() .Where(x => x.Min >= calculationViewModel.MortgageAmount) .FirstOrDefault() .MP; calculationViewModel.LoanAmount = (OP + 100) - MP; calculationViewModel.LendersTitleInsurance = (calculationViewModel.LoanAmount + 850); return View(calculationViewModel); } else { // Do something else... } } 

通常在目标为空时发生。 所以最好先检查调用目标,然后执行linq查询。

当我们手动实例化一个实体而不是通过DBContext来parsing所有的导航属性时,我发现这个问题在entity framework中很stream行。 如果表之间有外键引用(导航属性),并且在您的lambda中使用了这些引用(例如ProductDetail.Products.ID),那么如果手动创build实体,那么“Products”上下文将保留为空。