it-swarm.com.de

Für die nicht statische Methode ist ein Ziel erforderlich

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 (Nullable 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) bei LandTitle.Controllers.HomeController.MNRefi () bei lambda_method (Closure, ControllerBase, Object []) bei System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary 2 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.

214
user547794

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

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.

28
Jim Yu

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.

12
ccherwin

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.

2
Nathan

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

1
Shiv