अशक्त संदर्भ पर रनटाइम बाइंडिंग प्रदर्शन नहीं कर सकता है, लेकिन यह एक शून्य संदर्भ नहीं है


80

उपयोग: MVC 4, ASP.NET रेजर

मुझे एक त्रुटि मिल रही है जो ऐसा लगता है कि यह संभव नहीं होना चाहिए। यह मुझे बताता है कि मैं एक अशक्त-संदर्भ, राज्यों का उपयोग कर रहा हूं, लेकिन स्पष्ट रूप से यह निर्धारित किया जा रहा है।

नियंत्रक:

public ActionResult Index()
{
    Dictionary<int, string> states = new Dictionary<int, string>()
    {
        { -1, "a"},
        { 0, "b"},
        { 1, "c"},
        { 2, "d"},
    };

    //assigning states
    ViewBag.States = states;

    foreach (KeyValuePair<int, string> de in ViewBag.States)
    {
        Debug.WriteLine(de.Key);
    }
    return View();
}

देखें:

<div class="search-input">
    <select>
        @foreach (KeyValuePair<int, string> de in ViewBag.States)
        {
            <option value="@de.Key">@de.Value</option>
        }
    </select>
</div>

त्रुटि:

Cannot perform runtime binding on a null reference
Line 54: @foreach (KeyValuePair<int, string> de in ViewBag.States)

3
क्या आप सुनिश्चित हैं कि यह पहले आपकी विधि से सही तरीके से गुजर रहा है?
जॉन स्कीट

1
ब्रेकपॉइंट्स को अपनी Index()विधि और दृश्य में रखें, और देखें कि क्या आपको यह देखने में मदद करता है कि क्या गलत है।
टिम एस।

3
मुझे अपना जवाब मिला, सब कुछ सही था, मेरे विचार के अंदर मेरे पास एक पूरी तरह से असंबंधित वस्तु पर एक टाइपो था, मेरे पास एक ViewBag.TypoObject था - इससे सब गड़बड़ हो गया
जनरल कॉर्ड

जवाबों:


108

मिला समाधान: मेरे विचार में टाइपो था, ViewBag.Typo <- यह त्रुटि का कारण बना, लेकिन डिबगर ने अप्रासंगिक स्थान पर अपवाद रखा।


11
बस एक ही मुद्दा था जहां डिबगर दृश्य में गलत बिंदु पर अपवाद रख रहा था। मैं नीचे एक अशक्त संदर्भ था।
user1616625

5
बहुत कष्टप्रद लक्षण। मेरा मतलब है कि वास्तव में, डिबगर, यदि आप नहीं जानते कि समस्या क्या है या कहाँ है तो यह वास्तव में चीजों को कठिन बना देता है जब आप करते हैं।
ग्लेनट्रॉन

2
Arggggg! इस पर सिर्फ एक घंटा बिताया! एक आंशिक दृश्य था जिसका उपयोग कुछ भिन्न स्थानों पर किया जा रहा था ... मॉडल को एक ही बनाया गया था, लेकिन जब एक एक्ट्रेस से दूसरे को संदर्भित किया गया था तो वह गलत था। एक ViewBag मुद्दा होने के रूप में अच्छी तरह से समाप्त हो गया। यह एक एक्शन में सेट हो रहा था और दूसरे में नहीं। निराशा होती!!!
अंजेज़फ़र

इसने मुझे कुछ समय भी बचाया। इसी तरह की समस्या थी जहाँ मैं एक ViewBag संपत्ति का उपयोग कर रहा था जो अब अस्तित्व में नहीं थी, लेकिन त्रुटि 'शून्य संदर्भ पर बाध्यकारी बाइंडिंग प्रदर्शन नहीं कर सकती है' ने ऐसा प्रतीत किया कि यह कोड के असंबंधित हिस्से पर हो रहा था।
क्रिस मॉर्गन

8
रुको - टाइपो क्या था?
कुल्लूब

16

यह त्रुटि तब होती है जब आपके पास एक रेज़र कोड में एक विधि को कॉल करने के लिए व्यूबाग गैर- मौजूद है।

नियंत्रक

public ActionResult Accept(int id)
{
    return View();
}

रेज़र:

<div class="form-group">
      @Html.LabelFor(model => model.ToId, "To", htmlAttributes: new { @class = "control-label col-md-2" })
     <div class="col-md-10">
           @Html.Flag(Model.from)
     </div>
</div>
<div class="form-group">
     <div class="col-md-10">
          <input value="@ViewBag.MaximounAmount.ToString()" />@* HERE is the error *@ 
     </div>
</div>

किसी कारण से, .net सही लाइन में त्रुटि दिखाने में सक्षम नहीं हैं।

आम तौर पर यह बहुत समय बर्बाद करता है।


13

यह अपवाद तब भी फेंका जाता है जब प्रतिबिंब के उपयोग से गैर-मौजूद संपत्ति को गतिशील रूप से अपडेट किया जा रहा हो।

यदि कोई संपत्ति के मूल्यों को गतिशील रूप से अपडेट करने के लिए प्रतिबिंब का उपयोग कर रहा है, तो यह सुनिश्चित करने के लिए जांचने योग्य है कि पारित PropertyNameवास्तविक संपत्ति के समान है।

मेरे मामले में, मैं अद्यतन करने का प्रयास कर रहा था Employee.firstName, लेकिन संपत्ति वास्तव में थी Employee.FirstName

ध्यान रखने योग्य। :)


5

इस त्रुटि का मेरा समाधान यह था कि एक अन्य परियोजना से एक कॉपी और पेस्ट किया गया था जिसका संदर्भ था @Model.Id। इस विशेष पृष्ठ में एक मॉडल नहीं था लेकिन त्रुटि लाइन वास्तविक त्रुटि से दूर थी जिसके बारे में मैंने कभी नहीं पाया!


1

आपको राज्यों को शून्य के बराबर नहीं परिभाषित करना चाहिए।

@if (ViewBag.States!= null)
{
    @foreach (KeyValuePair<int, string> de in ViewBag.States)
    {
        value="@de.Key">@de.Value 
    }
}                                

-4

सेट

 Dictionary<int, string> states = new Dictionary<int, string>()

फ़ंक्शन के बाहर एक संपत्ति के रूप में और फ़ंक्शन के अंदर प्रविष्टियां डालें, यह काम करना चाहिए।


1
ओह क्या? नियंत्रक के गुण दृश्य से सुलभ नहीं हैं, यही कारण है कि वहाँ एक ViewBag और / या ViewModel है ...
थॉमस Levesque

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