2012-01-09 8 views
6

मुद्दा:
मैं इस तरह (केवल महत्वपूर्ण लाइनों) एक मार्कअप है:एएसपी/सी # के पीछे कोड मार्कअप से नियंत्रण नहीं पहुँच सकते हैं

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs" 
Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %> 
<ul id="linkUl" class="teaserLinksUL" runat="server"/> 

कोड-पीछे:

namespace MainSolution.CONTROLTEMPLATES.Kunde 
public partial class RTDeluxe : UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     linkUl.InnerHtml = string.Empty; 
    } 
} 

मैं कोड-पीछे के अंदर ul तक पहुंच सकता हूं और कोई संकलन त्रुटि नहीं प्राप्त कर सकता। लेकिन, जब मैं कोड डीबग करता हूं तो मुझे NullReferenceException मिलता है क्योंकि linkUl शून्य है।

सबसे पहले मैंने सोचा कि नामस्थान कारण हैं। लेकिन, कई कोशिशों के बाद, मुझे यकीन है कि वे सही हैं। FileLocation सही प्रतीत होता है और controltemplates मेरे आईआईएस के फ़ोल्डर में एक "कुंड" फ़ोल्डर है जिसमें संबंधित एसीएक्स फाइलें हैं।

मेरे पास एक ही संरचना के साथ अन्य .ascx फ़ाइलें हैं -> वे एक आकर्षण की तरह काम कर रहे हैं।

प्रश्न:
वहाँ इस तरह के व्यवहार के लिए नाम स्थान से किसी भी अन्य कारणों से कर रहे हैं? क्या आपके पास कोई संकेत है जहां मैं देख सकता हूं?

संपादित करें:

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl; 

EDIT2::
RTDeluxe.ascx.designer.cs फ़ाइल मौजूद है, उत्पन्न linkUl इस तरह दिखता है

ठीक है, मैं जवाब देने की कोशिश करेंगे आपके सभी प्रशन। आपके समय और प्रतिक्रिया के लिए धन्यवाद!

  1. मैंने विजुअल स्टूडियो को पुनरारंभ किया है -> समस्या बनी रहती है।
  2. मैंने भी समाधान को साफ कर लिया है और एक नया तैनात किया है। -> समस्या बनी रहती है।
  3. जब मैं डीबग करता हूं और नियंत्रण पदानुक्रम की जांच करता हूं तो मैं देख सकता हूं कि लेबल वहां नहीं है।
  4. जब मैं आईडी बदलता हूं तो संकलक कोड-पीछे (जो सही है) में एक त्रुटि फेंकता है। अगर मैं वहां आईडी बदलता हूं तो मुझे पहले जैसा ही व्यवहार मिलता है।
  5. मैंने अपने आईआईएस और पूरे पीसी को भी पुनरारंभ किया -> कोई बदलाव नहीं।
  6. मैंने लिंकुल-परिभाषा में कोई Name विशेषता जोड़ा है -> कोई बदलाव नहीं।
  7. जब मैं FindControl का उपयोग करने का प्रयास करता हूं तो यह शून्य लौटाता है।
  8. लक्ष्य-ढांचा .NET 3.5
  9. लिंकुल दोहराना या किसी अन्य नियंत्रण के अंदर नहीं है।
  10. web.config को हटाने/बदलने से भी समाधान नहीं होता है।
  11. linkUl तक पहुंचने से पहले EnsureChildControls जोड़ना कुछ भी नहीं बदलेगा।
  12. पेज_PreRender में कोड को स्थानांतरित करना भी काम नहीं करता है।

मैं आपके सुझावों को यहां सूचीबद्ध नहीं करूँगा और जल्द ही उन्हें जोड़ूंगा।

Edit3:
यहाँ पूर्ण मार्कअप:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %> 
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs" Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %> 

<ul id="linkUl" class="teaserLinksUL" runat="server"/> 

* Edit4:
यहाँ ठीक है कुछ अतिरिक्त जानकारी मुझे पता चला: जब मैं मार्कअप में कुछ बदलने, सादे को जैसे चाहें HTML टेक्स्ट जिसे ब्राउज़र में पहचाना या दिखाया नहीं गया है। जब मैं ऐसा कुछ करता हूं:

Label label1 = new Label(); 
    label1.Text = "hugo lives!"; 
    Controls.Add(label1); 

यह दिखाया गया है। ऐसा लगता है कि दृश्य स्टूडियो में सब ठीक है ... लेकिन सर्वर पर "लाइव" कोड-बैक कुछ अजीब अलग मार्कअप से बात करता है ...

+0

क्या आप linkUl के लिए अपनी कंपाइलर जेनरेट की गई परिभाषा दिखा सकते हैं? –

+0

क्या आपके पास RTDeluxe.designer.cs फ़ाइल है? – giammin

+0

@giammin हां, मैंने सवाल संपादित किया है। –

उत्तर

1

यह आप थोड़ा मदद कर सकता है:

कोड-पीछे श्रेणी स्तर पर उपयोगकर्ता के नियंत्रण से फ़ाइल पर, इस कोड जोड़ें:

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl = new System.Web.UI.HtmlControls.HtmlGenericControl(); 

और protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;RTDeluxe.ascx.designer.cs से फ़ाइल को हटा

ऐसा इसलिए हो सकता है क्योंकि इसका ऑब्जेक्ट अभी घोषित नहीं किया गया था। उम्मीद है कि यह मदद करता है ..

0

क्या आपने नियंत्रण तक पहुंचने या कोड को स्थानांतरित करने से पहले EnsureChildControls पर कॉल करने का प्रयास किया है OnPreRender?

+0

सुझावों के लिए धन्यवाद :) मैंने उन दोनों की कोशिश की, दुर्भाग्यवश यह व्यवहार को नहीं बदले :( –

+0

बहुत यकीन है कि सभी EnsureChildControls यह सुनिश्चित करता है कि CreateChildControls विधि केवल एक बार बुलाया जाता है। पृष्ठ डिफ़ॉल्ट रूप से ओवरराइड नहीं करता है और नियंत्रण में एक खाली सार विधि है । –

0

मुझे एक .aspx फ़ाइल में पहले इस तरह की समस्या है। यह मेरी वेब.कॉन्फिग फ़ाइल में ऑप्टिमाइज़ कॉम्पिलिशन को सही करने के कारण हुआ था।

<system.web> 
    <compilation optimizeCompilations="true" /> 
</system.web> 

optimizeCompilations सच ASP.Net पर सेट होने पर केवल पृष्ठों पुनर्निर्माण जब यह महसूस करता है यह आवश्यक है। कभी-कभी यह भ्रमित हो जाता है और यह नहीं पता कि आपने एक बदलाव किया है जिसके लिए एक पृष्ठ पुनर्निर्माण की आवश्यकता होती है जिसके परिणामस्वरूप एक रन-टाइम त्रुटि होती है जिसे संकलक नहीं पकड़ता है। इस सेटिंग http://msdn.microsoft.com/en-us/library/ms366723.aspx के बारे में अधिक जानकारी के लिए यहां देखें।

समस्या को ठीक करने के लिए मुझे अस्थायी रूप से अनुकूलन सेट करना था, मेरी वेबसाइट का पुनर्निर्माण करना, मेरी ऐप पूल रीसायकल करना और फिर इसे फिर से सत्य पर सेट करना था।

उम्मीद है कि इससे मदद मिलती है।

0

कभी-कभी ऐसी परिस्थितियों में यह हो सकता है कि इस फ़ाइल के संबंध में विजुअल स्टूडियो खराब स्थिति में आ गया हो। मैंने पाया है कि फाइलों को हटाने और उन्हें पुनर्निर्माण करने से अक्सर इस मुद्दे को हल किया जाएगा। कोड को कहीं भी कॉपी करना सुनिश्चित करें ताकि आप इसे नई बनाई गई फ़ाइलों में वापस पेस्ट कर सकें।

0

क्या आप विजुअल स्टूडियो प्रकाशित कार्यक्षमता का उपयोग कर तैनाती कर रहे हैं? यदि ऐसा है, तो अपने गंतव्य सर्वर पर .ascx फ़ाइल को हटाने का प्रयास करें। मेरे पास विजुअल स्टूडियो नहीं है कि फ़ाइल बदल गई है और फिर नई फाइल को कॉपी नहीं करता है।

संबंधित मुद्दे