2010-01-05 8 views
38

मैंने एक कस्टम नियंत्रण किया है जो एक शाब्दिक नियंत्रण से विरासत में आता है। जब मैं किसी पृष्ठ पर अपने नियंत्रण का प्रयास करता हूं और उसका उपयोग करता हूं तो एक पार्सिंग त्रुटि फेंक दी जाती है। मैं अपने web.configएएसपी.नेट कस्टम कंट्रोल - अज्ञात सर्वर टैग

<configuration> 
    <system.web> 
    <pages> 
     <controls> 
     <add tagPrefix="one" namespace="myApplication.Controls"/> 
     </controls> 
    </pages> 
    </system.web> 
</configuration> 

को यह जोड़ दिया है और मैं अपने पृष्ठ

<%@ register namespace="myApplication.Controls" tagprefix="one" %> 

इनमें से न तो इस मुद्दे को तय कर दी है करने के लिए इस जोड़ दिया है। मेरे पास कुछ कस्टम नियंत्रणों के साथ बाहरी असेंबली है जो मेरी परियोजना के भीतर ठीक काम करती है। कामकाज के रूप में, यदि कोई आसान समाधान नहीं है, तो मैं अपने कस्टम नियंत्रण को बाहरी पुस्तकालय में ले जाने पर विचार कर रहा हूं।

--edit

यहां पृष्ठ कोड है।

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SignUp.ascx.cs" Inherits="myApplication.Controls.SignUp" %> 
<%@ register namespace="myApplication.Controls" tagprefix="one" %> 
<div class="in"> 
    <span>  
     <one:resourceliteral id="lblFirstname" runat="server" resourcekey="FirstName" resourceresolver="ResourceStringResolver.GetResourceString"> 
     </one:resourceliteral>  
     </span> 
    <div> 
     <pl:textbox id="txtFirstName" runat="server"></pl:textbox> 
    </div> 
</div> 

और यहाँ मेरी वास्तविक नियंत्रण

namespace myApplication.Controls 
{ 
    public class ResourceLiteral : Literal 
    { 
     private ResourceManager rm; 

     public delegate string dResourceResolver(string label, eLanguage language); 

     public event dResourceResolver ResourceResolver; 

     public string ResourceKey { get; set; } 
     public object DataSource { get; set; } 

     private eLanguage _Language = eLanguage.ENUS; 
     public eLanguage Language 
     { 
      get { return _Language; } 
      set { _Language = value; } 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 

      if (ResourceResolver != null) 
       Text = ResourceResolver.Invoke(ResourceKey, _Language); 
      else 
      { 
       if(rm != null) 
       { 
        Text = rm.GetString(ResourceKey); 
       } 
      } 
     } 

     public void LoadDataSource(string resource) 
     { 
      rm = new ResourceManager(resource, Assembly.GetExecutingAssembly()); 
     } 

     public void LoadDataSource(Type resource) 
     { 
      rm = new ResourceManager(resource); 
     } 
    } 
} 
+0

हमें आपके द्वारा लिखे गए कोड की आवश्यकता है जो वास्तविक नियंत्रण का उपयोग करता है =) – zincorp

+0

एसीएक्स पृष्ठ और कोड बाहरी असेंबली में हैं? – jim

उत्तर

70

जब एक नाम स्थान को जोड़ने के लिए कोड है, मैं मिल गया है मैं भी विधानसभा की जरूरत है। यदि आपका विधानसभा भी है myApplication web.config में ऐसा करते हैं:

<add tagPrefix="one" namespace="myApplication.Controls" assembly="myApplication"/> 

फिर, बस स्वच्छ और पुनर्निर्माण और यह सब काम करना चाहिए। एक बार यह आपके web.config में है, तो आपको इसे अपने पृष्ठ पर जोड़ने की आवश्यकता नहीं है जबतक कि आप इसे उसी निर्देशिका में किसी नियंत्रण में उपयोग नहीं कर रहे हैं, तो आपको वेब फ़ॉर्म के शीर्ष पर संदर्भ की आवश्यकता होगी। लेकिन, मैं उपयोगकर्ता नियंत्रण के समान निर्देशिका में कस्टम सर्वर नियंत्रण का उपयोग करने की सलाह देता हूं।

+3

यह बहुत अजीब है ई कि यह असेंबली की आवश्यकता है, भले ही नियंत्रण ऐप के भीतर है। आपके सहयोग के लिए धन्यवाद। – Matt

+3

मैं देख सकता हूं कि इस जवाब में इतने सारे वोट क्यों हैं। – ProfK

1

यदि मैं आपको सही ढंग से समझता हूं, तो आपका नियंत्रण उसी प्रोजेक्ट के भीतर है?

निम्नलिखित के साथ अपने पृष्ठ की मार्कअप में नियंत्रण रजिस्टर करने के लिए प्रयास करें:

<%@ Register Src="~/controls/foo.ascx" TagName="foo" TagPrefix="uc" %> 

<uc:foo ID="foo1" runat="server"/> के साथ आप मार्कअप में नियंत्रण शामिल कर सकते हैं। यदि यह काम नहीं करता है, तो आपका नियंत्रण शायद संकलित नहीं हो सकता है। अनावश्यक सामानों पर टिप्पणी करें और इसे फिर से प्रयास करें।

+3

यह एक वेब नियंत्रण नहीं है जिसे मैं अपने पृष्ठ पर उपयोग करने का प्रयास कर रहा हूं। यह एक कस्टम नियंत्रण है जो System.Web.UI.WebControls.Literal क्लास से विरासत में मिलता है। – Matt

0

मुझे अपने एएसपी.NET वेब फॉर्म एप्लिकेशन को प्रकाशित करते समय भी यह समस्या थी। सर्वर के आईआईएस में फ़ोल्डर को प्रतिलिपि बनाने और चिपकाने के बावजूद, इसे प्रकाशित किए बिना, कस्टम नियंत्रण/उपयोगकर्ता नियंत्रणों का उपयोग करने वाले पृष्ठों पर समान समस्याएं व्यवस्थित रूप से हुईं।

मैंने सही ढंग से web.config पर नियंत्रण पंजीकृत किया और मेरी dev मशीन चीजों पर ठीक काम कर रहे थे। मैंने सोचा कि पंजीकरण प्रक्रिया ठीक थी।

प्रकाशित/कॉपी और अतीत तैनाती प्रक्रिया पर इस समस्या को ठीक करने के लिए, आप सभी उपयोगकर्ता नियंत्रण के नामस्थान और विधानसभाओं प्रत्येक पृष्ठ पर पुन: पंजीकृत होना चाहिए (.aspx) है कि उन्हें उपयोग करता है:

<%@ Register TagPrefix="mycompany" Namespace="MyCompany.Web.Forms.Controls" Assembly="MyCompany.Web" %> 
<%@ Register TagPrefix="mycomapny" Namespace="MyCompany.Web.Forms.Controls.ValidatorComponents" Assembly="MyCompany.Web" %> 

कृपया ध्यान दें कि कस्टम नियंत्रण या उपयोगकर्ता नियंत्रण के लिए यह वही मानसिकता है। यह समस्या वीएस 2012 में भी हुई लेकिन अभी भी .NET 4.0। जब आप एएसपी.नेट त्वचा इस तरह के नियंत्रणों का संदर्भ देते हैं तो इस प्रक्रिया की भी आवश्यकता होती है।

1

मुझे उपयोगकर्ता प्रोजेक्ट के लिए "अज्ञात सर्वर टैग" त्रुटि प्राप्त हो रही थी जो कि मेरे प्रोजेक्ट का हिस्सा था। कोई बाहरी असेंबली नहीं थी। @ सीट्रोनस ने उल्लेख किया कि "यदि यह काम नहीं करता है, तो आपका नियंत्रण शायद संकलित नहीं हो सकता है।", और this troubleshooting post में सबसे संभावित कारण के रूप में भी सूचीबद्ध है।

हालांकि मेरा नियंत्रण कोड त्रुटियों के बिना संकलित कर रहा था, लेकिन यह पता चला कि चेतावनी थी कि मैं अनदेखा कर रहा था। मेरी चेतावनियां एक संसाधन फ़ाइल के बारे में थीं जिसमें मेरे नियंत्रण फ़ोल्डर एक और लापता फ़ाइल को संदर्भित कि गया था एक बार मैं चेतावनी को संबोधित किया, तो नियंत्रण सही ढंग से संकलित और मैं सिर्फ एक रजिस्टर निर्देश के साथ नियंत्रण का उपयोग करने में सक्षम था और web.config को कोई संशोधन, इस तरह:।

<%@ Register TagPrefix="myPrefix" TagName="myControl" Src="~/controls/mySourceFile.ascx" %> 

<myPrefix:myControl runat="server"></myPrefix:myControl>