非静态方法需要一个目标 [英] Non-static method requires a target
本文介绍了非静态方法需要一个目标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个控制器动作是在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屋!
查看全文