Ich habe eine Controller-Aktion, die in Firefox sowohl lokal als auch in der Produktion einwandfrei funktioniert, und IE lokal, aber nicht IE in der Produktion. Hier ist meine Controller-Aktion:
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);
}
Hier ist der Stack-Trace, den ich im IE bekomme:
Error. Während Ihrer Anfrage ist ein Fehler aufgetreten. System.Reflection.TargetException: Für die nicht statische Methode ist ein Ziel erforderlich. bei System.Reflection.RuntimeMethodInfo.CheckConsistency (Object target) bei System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck (Object obj, BindingFlags invokeAttr, Sammelmappe, Object [] -Parameter, CultureInfo culture) bei System.Reflection.RuntimeMethodInfo.Invoke (Object BindingFlags invokeAttr, Sammelmappe, Object [] -Parameter, CultureInfo-Kultur) bei System.Reflection.RuntimePropertyInfo.GetValue (Object obj, Object [] -Index) bei System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue (MemberExpression me, Object & memberValue) bei System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath (Ausdrucksausdruck, ConstantExpression & constantExpression) bei System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter (Object [] inq.QueryParameter.Objects.ELinq .GetExecutionPlan (Nullable
1 forMergeOption) at System.Data.Objects.ObjectQuery
1.GetResults (Nullable1 forMergeOption) at System.Data.Objects.ObjectQuery
1.System.Collections.Generic.IEnumerable.GetEnumerator () at System.Linq.Enumerable. FirstOrDefault [TSource] (IEnumerable1 source) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable
1 source) bei LandTitle.Controllers.HomeController.MNRefi () bei lambda_method (Closure, ControllerBase, Object []) bei System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
2 parameters) at Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget () at Castle.DynamicProxy.AbstractInvocation.Proceed () at Glimpse.Mvc3.Interceptor.InvokeActionMethodInterceptor .AbstractInvocation.Proceed () bei Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary``2-Parameter) bei System.Web.Mvc.Async.AsyncControllerActionInvoker System.Web.Mvc.Async.AsyncControllerActionInvoker. <> C__DisplayClass4f.b__49 () bei System.Web.Mvc.Async.AsyncControllerActionInvoker. <> C__DisplayClass37.b_ _36 (IAsyncResult asyncResult) bei System.Web.Mvc.Async.AsyncControllerActionInvoker. <> C__DisplayClass25. <> C__DisplayClass2a.b__20 () bei System.Web.Mvc.Async.AsyncControllerActionInvoker.
Ich denke, diese verwirrende Ausnahme tritt auf, wenn Sie eine Variable in einem Lambda verwenden, das zur Laufzeit eine Nullreferenz ist. In Ihrem Fall würde ich prüfen, ob Ihre Variable berechnungViewModel eine Nullreferenz ist.
So etwas wie:
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...
}
}
Normalerweise passiert es, wenn das Ziel null ist. Überprüfen Sie also besser zuerst das aufgerufene Ziel und führen Sie dann die linq-Abfrage durch.
Ich habe festgestellt, dass dieses Problem in Entity Framework häufig auftritt, wenn eine Entität manuell und nicht über DBContext instanziiert wird, wodurch alle Navigationseigenschaften aufgelöst werden. Wenn Fremdschlüsselverweise (Navigationseigenschaften) zwischen Tabellen vorhanden sind und Sie diese Verweise in Ihrem Lambda verwenden (z. B. ProductDetail.Products.ID), bleibt der Kontext "Products" null, wenn Sie die Entität manuell erstellt haben.
Alle Antworten verweisen auf einen Lambda-Ausdruck mit einer NRE (Null Reference Exception). Ich habe festgestellt, dass es auch bei der Verwendung von Linq to Entities auftritt. Ich dachte, es wäre hilfreich, darauf hinzuweisen, dass diese Ausnahme nicht nur auf ein NRE in einem Lambda-Ausdruck beschränkt ist.
Beim Testen von WebAPI im Postman-Tool tritt dieser Fehler auf.
Wenn wir nach dem Erstellen des Codes eine Zeile entfernen ( Zum Beispiel: In meinem Fall trat dieser Fehler auf, als ich eine kommentierte Zeile entfernte ... ) in Debugging-Modus, dann wird der Fehler "Nicht-statische Methode erfordert ein Ziel" auftreten.
Wieder habe ich versucht, die gleiche Anfrage zu senden. Dieser Timecode funktioniert einwandfrei. Und ich bekomme die Antwort richtig in Postman.
Ich hoffe es wird jemandem nutzen ...