गैर-स्थैतिक विधि को एक लक्ष्य की आवश्यकता होती है


238

मेरे पास एक नियंत्रक क्रिया है जो स्थानीय और उत्पादन दोनों में फ़ायरफ़ॉक्स पर ठीक काम करती है, और 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 पर (Object obj, Binding.lags invokeAttr, Binder binder, ऑब्जेक्ट [] पैरामीटर, कल्चरइन्फो कल्चर) को SystemReflection.gov.in पर। System.Reflection.RuntimePropertyInfo.GetValue (Object obj, Object [] सूचकांक) System.Data.Objects.ELinq.QueryParameterExpression.ryGetFieldOrrrrrr पर BindingFlags invokeAttr, Binder binder, Object [] पैरामीटर, CultureInfo कल्चर। 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 1 source) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryableपर "TSource (Landnitable 1 स्रोत) LandTitle.Controllers.HomeController.MNefroller.MNefroller.MNefroller.MNefer। , Object []) System.Web.Mv पर।2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 पैरामीटर) Castle.Proxies.Invocations.ControllerActionInvoker_InvokeActionMethod.InvokeMethodOnTarget () Castle पर। Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionMethod (ControllerContext कंट्रोलरContext, ActionDescriptor एक्शनDescriptor, IDEDIA``2 पैरामीटर्स System.Web.Mvc.sync.AsyncControllerActionInvoker; c_DisitClux) पर क्लिक करें। .AsyncControllerActionInvoker। <> C__DisplayClass4f.b__49 () System.Web.Mvc.Async.AsyncControllerActionInvoker पर। <> c.WDisplayClass37.b__36 (IAsyncResult asyncResult) System.Web.Mvc.sync पर।AsyncControllerActionInvoker। <> c__DisplayClass25। <> C__DisplayClass2a.b__20 () System.Web.Mvc.Async.AsyncControllerAction_voker पर। <> C__DisplayClass25.b__22 (IAsyncResult asult)


जवाबों:


497

मुझे लगता है कि यह भ्रामक अपवाद तब होता है जब आप एक लैम्बडा में एक चर का उपयोग करते हैं जो रन-टाइम पर एक शून्य-संदर्भ होता है। आपके मामले में, मैं जाँच करूंगा कि क्या आपका चर गणना व्यूमॉडल एक अशक्त संदर्भ है।

कुछ इस तरह:

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

71
+1 यह निश्चित रूप से एक Where()मेमने की अभिव्यक्ति में एनआरई का परिणाम है । बहुत बढ़िया जवाब; आज मुझे घंटों बचाया।
युकल

मानों के साथ एक ही मुद्दा था कि लोडिंग नहीं है और एक विरासत नियंत्रक कंस्ट्रक्टर से सेट किया जा रहा है, फिर एक चाइल्ड कंट्रोलर के कंस्ट्रक्टर में एक linq क्वेरी में पारित किया जा रहा है और इस रहस्यमय त्रुटि को फेंक रहा है!
शॉनसन

3
मुझे लगता है कि आपको यह त्रुटि मिलने का कारण यह है कि लैंबडा इंटर्नल में कुछ परावर्तन कर रहा है और यह ऑब्जेक्ट पर किसी विधि / गुण को कॉल करने का प्रयास कर रहा है, लेकिन कोई ऑब्जेक्ट पास नहीं हो रहा है, इसलिए यह विधि को कॉल करने का प्रयास कर रहा है / संपत्ति की तरह यह स्थिर है, लेकिन यह अंततः पता चलता है कि यह स्थिर नहीं है। यही कारण है कि आप एक वस्तु संदेश के उदाहरण के लिए निर्धारित नहीं पुराने सादे वस्तु संदर्भ नहीं मिलता है।
मेलबर्न डेवलपर

बस पहला वाक्य पढ़ना समस्या को हल करने के लिए पर्याप्त है
एंटोनी पेल्लेटियर

33

आम तौर पर यह तब होता है जब लक्ष्य शून्य होता है। इसलिए बेहतर है कि पहले इनवॉइस टारगेट को चेक करें और फिर linq क्वेरी करें।


5
मेरे मामले में यह एक अशक्त संदर्भ अपवाद था जहां खंड
ब्रेवेवेनमैथ

12

मैंने इस मुद्दे को एंटिटी फ्रेमवर्क में प्रचलित पाया है, जब हम DBContext के माध्यम से मैन्युअल रूप से एंटिटी को इंस्टैंट करते हैं जो सभी नेविगेशन प्रॉपर्टी को हल कर देगा। यदि तालिकाओं के बीच विदेशी कुंजी संदर्भ (नेविगेशन गुण) हैं और आप उन संदर्भों का उपयोग अपने लंबो (उदाहरण के लिए ProductDetail.Products.ID) में करते हैं तो उस "उत्पाद" संदर्भ को अशक्त बना रहता है यदि आपने मैन्युअल रूप से इकाई का निर्माण किया है।


2

सभी जवाब एक एनआरई (अशक्त संदर्भ अपवाद) के साथ एक लैम्ब्डा अभिव्यक्ति की ओर इशारा कर रहे हैं। मैंने पाया है कि यह Linq Entities का उपयोग करते समय भी होता है। मैंने सोचा कि यह इंगित करना उपयोगी होगा कि यह अपवाद केवल एक एनबीआर के लिए एक लैम्ब्डा अभिव्यक्ति के अंदर तक सीमित नहीं है।


1

मैं पोस्टमैन टूल में वेबएपीआई के परीक्षण पर इस त्रुटि का सामना करता हूं।

कोड बनाने के बाद, यदि हम किसी भी लाइन को हटाते हैं ( उदाहरण के लिए: मेरे मामले में जब मैं एक टिप्पणी लाइन को हटाता हूं तो यह त्रुटि आई थी ... ) डिबगिंग मोड में है तो " गैर-स्थिर विधि के लिए लक्ष्य की आवश्यकता होती है " त्रुटि उत्पन्न होगी।

फिर से, मैंने वही अनुरोध भेजने का प्रयास किया। इस बार कोड ठीक से काम कर रहा है। और मुझे पोस्टमैन में ठीक से प्रतिक्रिया मिल रही है।

मुझे आशा है कि यह किसी का उपयोग करेगा ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.