비 정적 방법에는 대상이 필요합니다
Firefox는 로컬 및 프로덕션 모두에서, IE 로컬에서는 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.InvokeArgumentsCheck (Object obj, BindingFlags invokeAttr, Binder binder, Object [] 매개 변수, CultureInfo culture)의 System.Reflection.RuntimeMethodInfo.Invoke (Object obj, System.Reflection.RuntimeMethodInfo.System.Reflection.RuntimeMethodInfo. BindingFlags는 System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue (MemberExpression me, Object instance, System.Reflection.RuntimePropertyInfo.GetValue (Object obj, Object [] index)의 invokeAttr, 바인더 바인더, Object [] 매개 변수, CultureInfo culture)를 호출합니다. System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath (Expression expression, ConstantExpression &)의 Object & memberValue)
1 forMergeOption) at System.Data.Objects.ObjectQuery
1 forMergeOption) at System.Data.Objects.ObjectQuery
1.1 source) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable
LandTitle.Controllers.HomeController.MNRefi () lambda_method (Closure, ControllerBase )의 System.Linq.Enumerable.FirstOrDefault [TSource] (IEnumerable 1 source)의 GetResults (Nullable 1.System.Collections.Generic.IEnumerable.GetEnumerator () System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary의, Object [])2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget ()의 Glimpse.Mvc3.Interceptor.InvokeActionMethodInterceptor.Intercept (IInvocationbsProc.Inc.에서 캐슬 .DynamicProxy.AbstractInvocation.Proceed ()의 2 매개 변수) System.Web.Mvc.A의 System.Web.Mvc.Async.AsyncControllerActionInvoker.의 Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary``2 parameters). <> c__DisplayClass37. <> c__DisplayClass39.b__33 () System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass37.b__36 (IAsyncResult asyncResult)의 System.Web.Mvc.Async.AsyncControllerActionInvoker. <>에서 .AsyncControllerActionInvoker. <> c__DisplayClass4f.b__49 ()System.Web.Mvc.Async.AsyncControllerActionInvoker의 c__DisplayClass25. <> c__DisplayClass2a.b__20 () <> c__DisplayClass25.b__22 (IAsyncResult asyncResult)
런타임에 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...
}
}
일반적으로 대상이 null 일 때 발생합니다. 따라서 호출 대상을 먼저 확인한 다음 linq 쿼리를 수행하십시오.
모든 탐색 속성을 해결하는 DBContext 대신 Entity를 수동으로 인스턴스화 할 때 Entity Framework 에서이 문제가 만연한 것으로 나타났습니다. 테이블간에 외래 키 참조 (탐색 속성)가 있고 람다에서 해당 참조 (예 : ProductDetail.Products.ID)를 사용하는 경우 엔터티를 수동으로 생성 한 경우 "제품"컨텍스트가 null로 유지됩니다.
모든 답변은 NRE (Null Reference Exception)가있는 Lambda 표현식을 가리 킵니다. Linq를 엔티티에 사용할 때도 발생한다는 것을 알았습니다. 이 예외는 Lambda 표현식 내의 NRE에만 국한되지 않는다는 점을 지적하면 도움이 될 것이라고 생각했습니다.
Postman 도구에서 WebAPI를 테스트 할 때이 오류가 발생합니다.
코드를 빌드 한 후 디버깅 모드에서 행을 제거하면 ( 예 : 주석 처리 된 행 하나를 제거 할 때이 오류가 발생했습니다 ... ) " 비 정적 방법에는 대상이 필요합니다 "오류가 발생합니다.
다시, 나는 같은 요청을 보내려고 노력했다. 이 타임 코드는 올바르게 작동합니다. 그리고 우편 배달부에서 제대로 응답을 얻습니다.
누군가에게 사용되기를 바랍니다 ...
참고 URL : https://stackoverflow.com/questions/13717355/non-static-method-requires-a-target
'IT story' 카테고리의 다른 글
PHP“php : // input”vs $ _POST (0) | 2020.04.25 |
---|---|
JDK 8의 PermGen 제거 (0) | 2020.04.25 |
AngularJS-ng-model을 사용하면 입력 텍스트 상자의 값 속성이 무시됩니까? (0) | 2020.04.25 |
div를 나란히 배치하는 방법 (0) | 2020.04.25 |
두 배열이 JavaScript와 같은지 확인하는 방법은 무엇입니까? (0) | 2020.04.25 |