El método no estático requiere un objective

Tengo una acción de controlador que funciona bien en Firefox tanto localmente como en producción, e IE localmente, pero no IE en producción. Aquí está mi acción de controlador:

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

Aquí está la traza de stack que obtengo en IE:

Error. Se produjo un error al procesar su solicitud. System.Reflection.TargetException: método no estático requiere un objective. en System.Reflection.RuntimeMethodInfo.CheckConsistency (Object target) en System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck (Object obj, BindingFlags invokeAttr, Binder Binder, Object [] parámetros, CultureInfo culture) en System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder Binder, Object [] parámetros, CultureInfo culture) en System.Reflection.RuntimePropertyInfo.GetValue (Object obj, Object [] index) en System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue (MemberExpression me, instancia de objeto, Object y memberValue) en System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath (Expression expression, ConstantExpression y constantExpression) en System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter (Object [] arguments) en System.Data.Objects.ELinq.ELinqQueryState .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 () en System.Linq.Enumerable.FirstOrDefault [TSource] ( 1 source) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable IEnumerable 1 source) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable fuente IQueryable 1) en LandTitle.Controllers .HomeController.MNRefi () en lambda_method (Closure, ControllerBase, Object []) en System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary 2 parameters) en Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget () en Castle.DynamicProxy.AbstractInvocation.Proceed () en Glimpse.Mvc3.Interceptor.InvokeActionMethodInterceptor.Intercept (invocación de invocación II) en Castle.DynamicProxy.AbstractInvocation.Proceed () en Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, parámetros IDictionary`2) en System.Web.Mvc.Async.AsyncControllerActionInvoker. c__DisplayClass37. c__DisplayClass39.b__33 () en System.Web.Mvc.Async.AsyncControllerActionInvoker. c__DisplayClass4f.b__49 () en System. Web.Mvc.Async.AsyncControllerActionInvoker. C__DisplayClass37.b__36 (IAsyncResult asyncResult) en System.Web.Mvc.Async.AsyncControllerActionInvoker. C__DisplayClass25. C__DisplayClass2a.b__20 () en System.Web.Mvc.Async.AsyncControllerActionInvoker. c__DisplayClass25.b__22 (IAsyncResult asyncResult)

Creo que esta excepción confusa se produce cuando utilizas una variable en un lambda que es una referencia nula en tiempo de ejecución. En su caso, verificaría si su cálculo variable ViewModel es una referencia nula.

Algo como:

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

Normalmente sucede cuando el objective es nulo. Así que mejor compruebe el objective de invocación primero y luego haga la consulta de linq.

He encontrado que este problema prevalece en Entity Framework cuando instanciamos una Entidad de forma manual en lugar de a través de DBContext, que resolverá todas las Propiedades de navegación. Si hay referencias de clave externa (Propiedades de navegación) entre tablas y utiliza esas referencias en su lambda (por ejemplo, ProductDetail.Products.ID), entonces ese contexto de “Productos” permanece nulo si creó la Entidad manualmente.