非静态方法需要一个目标 [英] Non-static method requires a target

查看:2736
本文介绍了非静态方法需要一个目标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个控制器动作是在Firefox本地和生产,以及IE浏览器工作正常,本地,而不是IE浏览器的生产。这是我的控制器操作:

 公众的ActionResult MNPurchase()
        {
            CalculationViewModel calculationViewModel =(CalculationViewModel)的TempData [calculationViewModel];            小数OP = landTitleUnitOfWork.Sales.Find()
                                            。凡(X => x.Min> = calculationViewModel.SalesPrice)
                                            .FirstOrDefault()
                                            .OP;            小数MP = landTitleUnitOfWork.Sales.Find()
                                            。凡(X => x.Min> = calculationViewModel.MortgageAmount)
                                            .FirstOrDefault()
                                            .MP;            calculationViewModel.LoanAmount =(OP + 100) - MP;
            calculationViewModel.LendersTitleInsurance =(calculationViewModel.LoanAmount + 850);
            返回查看(calculationViewModel);
        }

下面是堆栈跟踪我在IE中得到:

 错误。
    处理您的请求时发生错误。
    System.Reflection.TargetException:非静态方法需要一个目标。在
System.Reflection.RuntimeMethodInfo.CheckConsistency(目标对象)的
System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(obj对象,的BindingFlags
invokeAttr,粘结剂粘合,对象[]参数,CultureInfo的文化)处
System.Reflection.RuntimeMethodInfo.Invoke(obj对象,的BindingFlags invokeAttr,捆扎机
粘合剂,对象[]参数,CultureInfo的文化)处
System.Reflection.RuntimePropertyInfo.GetValue(obj对象,对象[]指数)的
System.Data.Objects.ELinq.QueryParameterEx pression.TryGetFieldOrPropertyValue(MemberEx pression我,对象实例,对象和放大器; memberValue)在
System.Data.Objects.ELinq.QueryParameterEx pression.TryEvaluatePath(前pression前pression,ConstantEx pression&放大器; constantEx pression)的
System.Data.Objects.ELinq.QueryParameterEx pression.EvaluateParameter(对象[]参数)
在System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
在System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)在
System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable< T> .GetEnumerator()
 在System.Linq.Enumerable.FirstOrDefault [TSource](IEnumerable`1源)在
System.Linq.Queryable.FirstOrDefault [TSource](IQueryable`1源)在
LandTitle.Controllers.HomeController.MNRefi()在lambda_method(封闭,ControllerBase,
 在System.Web.Mvc.ReflectedActionDescriptor.Execute对象[])(ControllerContext
controllerContext,IDictionary`2参数)在
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
controllerContext,ActionDescriptor actionDescriptor,IDictionary`2参数)在
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.<BeginInvokeActionMethodWithFilters>b__33()在
System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()在
System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult)在
System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20()在System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
    首页MNRefi


解决方案

我认为当你在一个lambda这是在运行时的空引用使用一个变量出现这种混乱异常。在你的情况,我会检查你的变量calculationViewModel是一个空引用。

是这样的:

 公众的ActionResult MNPurchase(){
    CalculationViewModel calculationViewModel =(CalculationViewModel)的TempData [calculationViewModel];    如果(calculationViewModel!= NULL){
        小数OP = landTitleUnitOfWork.Sales.Find()
                                        。凡(X =&GT; x.Min&GT; = calculationViewModel.SalesPrice)
                                        .FirstOrDefault()
                                        .OP;        小数MP = landTitleUnitOfWork.Sales.Find()
                                        。凡(X =&GT; x.Min&GT; = calculationViewModel.MortgageAmount)
                                        .FirstOrDefault()
                                        .MP;        calculationViewModel.LoanAmount =(OP + 100) - MP;
        calculationViewModel.LendersTitleInsurance =(calculationViewModel.LoanAmount + 850);
        返回查看(calculationViewModel);
    }其他{
        //做别的东西...
    }
}

I have a controller action that works fine on Firefox both locally and in production, and IE locally, but not IE in production. Here is my controller action:

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

Here is the stack trace I get in IE:

   Error.
    An error occurred while processing your request.
    System.Reflection.TargetException: Non-static method requires a target. at 
System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target) at 
System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags 
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at 
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder 
binder, Object[] parameters, CultureInfo culture) at 
System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index) at 
System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue(MemberExpression me, Object instance, Object& memberValue) at 
System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath(Expression expression, ConstantExpression& constantExpression) at 
System.Data.Objects.ELinq.QueryParameterExpression.EvaluateParameter(Object[] arguments) 
at 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.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
 at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source) at 
System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source) at 
LandTitle.Controllers.HomeController.MNRefi() at lambda_method(Closure , ControllerBase ,
 Object[] ) at 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.Intercept(IInvocation invocation) at Castle.DynamicProxy.AbstractInvocation.Proceed() at 
Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) at 
System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() at 
System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() at 
System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) at 
System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult)
    Home MNRefi

解决方案

I think this confusing exception occurs when you use a variable in a lambda which is a null-reference at run-time. In your case, I would check if your variable calculationViewModel is a null-reference.

Something like:

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

这篇关于非静态方法需要一个目标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆