2010-01-05 24 views
38

Bir Literal denetimden miras alınan bir özel denetim yaptım. Denetimi bir sayfada kullanmaya çalıştığımda ayrıştırma hatası atılıyor. Benim web.configASP.NET Özel Denetimi - Bilinmeyen bir sunucu etiketi

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

bu ekledik Ve ben sayfanın Bunların hiçbiri sorunu çözdünüz

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

bu ekledik. Projemde gayet iyi çalışan bazı özel kontroller ile harici bir meclis var. Bir çözüm olarak, basit bir çözüm yoksa özel denetimimi harici kitaplığa taşımayı düşünüyorum.

--edit

İşte sayfa kod.

<%@ 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> 

Ve işte benim asıl kontrolün

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

Gerçek kontrolü kullanan yazdığınız kodlara ihtiyacımız var =) – zincorp

+0

ascx sayfası ve kod harici bir derlemede mi? – jim

cevap

70

bir ad alanı eklemek için kod nedir, ben de montaj ihtiyacım buldum.

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

Sonra sadece temiz ve yeniden inşa ve tüm çalışma yapmalıdır: sizin montaj da ise myApplication web.config'de yapıyoruz. Bu, web.config'inizdeyken, aynı dizinde bir kontrolde kullanmıyorsanız, sayfanıza eklemeniz gerekmez, ardından web formunun en üstünde referansa ihtiyacınız olacaktır. Ancak, kullanıcı denetimleriyle aynı dizinde özel sunucu denetimleri kullanmamanızı öneririz.

+3

Kontrol, uygulama içinde olsa bile montaj gerektirdiği. Yardımın için teşekkürler. – Matt

+3

Bu cevabın neden bu kadar çok oyu olduğunu görebiliyorum. – ProfK

1

Sizi doğru anlarsam, denetiminiz aynı projede mi?

aşağıdaki sayfanızın işaretlemesinde denetimi kaydetmek için deneyin: <uc:foo ID="foo1" runat="server"/> ile

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

İşaretleme içine kontrolünü içerebilir. Eğer bu işe yaramazsa, kontrolünüz muhtemelen derlenemez. Gereksiz şeyleri yorumlayın ve tekrar deneyin.

+3

Bu, sayfamda kullanmaya çalıştığım bir web denetimi değil. System.Web.UI.WebControls.Literal sınıfından devralan özel bir denetim var. – Matt

0

ASP.NET Web Formlarım uygulamasında yayımlarken bu sorunu da yaşadım. Klasörü sunucunun IIS'sine kopyalayıp yapıştırırken bile, özel denetimleri/kullanıcı denetimlerini kullanan sayfalardaki benzer sorunlar sistematik olarak gerçekleşti.

Web.config üzerindeki denetimleri doğru bir şekilde kaydettim ve dev makinelerimde işler iyi çalışıyordu. Kayıt sürecinin iyi olduğunu düşündüm.

/yayımlamak kopyalayıp geçmiş dağıtım sürecine sorunu çözmek için, her sayfadaki tüm kullanıcı kontrolleri en ad alanlarını ve meclisleri yeniden kayıt etmelidir (.aspx) onları kullanır:

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

Lütfen Özel denetimler veya kullanıcı denetimleri için aynı zihniyet olduğunu unutmayın. Bu sorun, VS 2012'de bile oldu, ancak .NET 4.0. ASP.NET'in bu tür denetimlere başvurduğunda bu işlem de gereklidir.

1

Projemin bir parçası olan bir kullanıcı denetimi için "Bilinmeyen sunucu etiketi" hatasını alıyordum. Harici bir meclis yoktu. @citronas, "Bu işe yaramazsa, kontrolünüz muhtemelen derlenemez.""ve bu da en olası neden olarak listelenir this troubleshooting post.

Denetim kodum hatasız bir şekilde derlenmiş olsa da, gözardı ettiğim uyarılar olduğu ortaya çıktı. Uyarılarım, içindeki bir kaynak dosyasına ilişkin benim kontrol klasörü başka eksik dosya başvuran olduğunu sonra denetimi doğru derlenmiş, uyarıları ele ve sadece bir Kayıt yönergesi ile kontrolünü kullanmak başardı ve web.config hiçbir değişiklik olmaması kez böyle:.

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

<myPrefix:myControl runat="server"></myPrefix:myControl> 
İlgili konular