非静态方法需要一个目标。

19 浏览
0 Comments

非静态方法需要一个目标。

我有一个控制器动作在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)中 at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj,BindingFlags invokeAttr,Binder binder,Object[] parameters,CultureInfo culture) 在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] parameters,CultureInfo culture) 在System.Reflection.RuntimePropertyInfo.GetValue(Object obj,Object[] index)中 在System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue(MemberExpression me,Object instance,Object&memberValue)中 在System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath(Expression expression,ConstantExpression&constantExpression)中 在System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter(Object[] arguments)中 在System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable1 forMergeOption)中 在System.Data.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)中 在System.Data.Objects.ObjectQuery1.System.Collections.Generic.IEnumerable.GetEnumerator()中 在System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 source)中 在System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 source)中 在LandTitle.Controllers.HomeController.MNRefi()中 在lambda_method(Closure,ControllerBase,Object[])中 在System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary2 parameters)中 在System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary2 parameters)中 在Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget()中 在Castle.DynamicProxy.AbstractInvocation.Proceed()中 在Glimpse.Mvc3.Interceptor.InvokeActionMethodInterceptor.Intercept(IInvocation invocation)中 在Castle.DynamicProxy.AbstractInvocation.Proceed()中 在Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary``2 parameters)中 在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)

请将下面的内容翻译为中文,不要翻译HTML标签,单引号和双引号内的内容,保留原文中的\"

123

\" 字符:

admin 更改状态以发布 2023年5月23日
0
0 Comments

通常出现这种情况是目标为空。因此最好先检查调用目标,然后进行LINQ查询。

0
0 Comments

我认为,当您在lambda中使用一个在运行时为null引用的变量时,就会出现这种令人困惑的异常。在您的情况下,我会检查您的变量calculationViewModel是否是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...
    }
}

0