非静的メソッドにはターゲットが必要です 質問する

非静的メソッドにはターゲットが必要です 質問する

ローカルでも本番環境でも 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.CheckConsistency(Object target)、System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj、BindingFlags invokeAttr、Binder バインダー、Object[] パラメーター、CultureInfo culture)、System.Reflection.RuntimeMethodInfo.Invoke(Object obj、BindingFlags invokeAttr、Binder バインダー、Object[] パラメーター、CultureInfo culture)、System.Reflection.RuntimePropertyInfo.GetValue(Object obj、Object[] インデックス)、System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue(MemberExpression me、Object instance、Object& memberValue)、System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath(Expression 式、ConstantExpression& constantExpression)、 System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter(Object[] 引数)、System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable 1 forMergeOption) at System.Data.Objects.ObjectQuery1.GetResults(Nullable 1 forMergeOption) at System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable.GetEnumerator()、System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable 1 source) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 ソース)、LandTitle.Controllers.HomeController.MNRefi()、lambda_method(Closure、ControllerBase、Object[])、System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext、IDictionary 2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 パラメーター)、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 actionDescriptor、IDictionary``2 パラメーター)、System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.b__33()、System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.b__49()、System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.b__36(IAsyncResult asyncResult)、 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.b__20() は、System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.b__22(IAsyncResult asyncResult) にあります。

ベストアンサー1

この紛らわしい例外は、実行時に null 参照となるラムダ内の変数を使用した場合に発生すると思います。あなたの場合、変数 computingViewModel が null 参照であるかどうかを確認します。

何かのようなもの:

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

おすすめ記事