269

私はローカルと実稼働環境の両方で 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 (オブジェクト ターゲット) で System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck (オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [] パラメーター、CultureInfo カルチャ) で System.Reflection.RuntimeMethodInfo.Invoke (オブジェクト obj、 System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index) at System.Data.Objects.ELinq.QueryParameterExpression.TryGetFieldOrPropertyValue(MemberExpression me, Object instance, System.Data.Objects.ELinq.QueryParameterExpression.TryEvaluatePath(式式、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 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() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.b__22(IAsyncResult asyncResult)

4

8 に答える 8

552

この紛らわしい例外は、実行時にヌル参照である変数をラムダで使用すると発生すると思います。あなたの場合、変数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...
    }
}
于 2012-12-05T06:48:32.923 に答える
40

通常、ターゲットが null の場合に発生します。したがって、最初に呼び出しターゲットを確認してから、linq クエリを実行することをお勧めします。

于 2013-10-11T04:26:46.993 に答える
3

すべての回答は、NRE (Null Reference Exception) を含む Lambda 式を指しています。Linq to Entities を使用している場合にも発生することがわかりました。この例外は Lambda 式内の NRE だけに限定されないことを指摘しておくと役立つと思います。

于 2018-11-01T12:12:58.293 に答える
1

(これはエラーに関する簡単な例です)

このエラーは、Linq クエリが DB コンテキストからデータを取得し、DB コンテキストの一致 ID が null であるときに発生しました。例: 学生レコード (参照テ​​ーブル) に基づいて、DB から卒業生情報を取得します。

var getAlumniData = DBContext.Alumni.Where(a => a.AlumniID == loginHistory.AlumniID)
                      .Select(a => new Alumni
                       {
                          Enrollment = a.Student.Enrollment,
                          RegistrationNo = a.RegistrationNo,
                          Name = a.Name,
                       }).SingleOrDefault();

ユーザーのログイン履歴から一致する ID を取得します。ユーザーのログイン履歴が null の場合、loginHistory. 卒業生 ID が null です。そのため、必要なターゲットが必要かどうかを尋ねるエラーが発生しました。

于 2021-03-19T05:28:16.950 に答える