2009-03-25 17 views
5

Şu anda mümkün

<pages validateRequest="false"> 
    <controls> 
    <add tagPrefix="cc1" src="~/Controls/MyUserControl1.ascx" tagName="MyUserControl1"/> 
    ...  
    <add tagPrefix="cc1" src="~/Controls/MyUserControlN.ascx" tagName="MyUserControlN"/> 
    </controls> 
</pages> 

Ama zaman ben web.config tarihi için unutmak zaman Web.config

ayrı her kullanıcı denetimi kayıt ediyorum belirtilen dizindeki tüm kullanıcı denetimlerini kayıt mı . Aslında, genellikle onu değiştirdiğini unutuyorum çünkü çoğu zaman yerel db DB kopyasına bağlanmak için ayarlanmış diğer ayarları bozuyor. Merak ediyorum

mümkün sadece bu yüzden bildiğim kadarıyla, bütün Kontroller dizini belirtin ve orada otomatik

web.config'de mümkün değildir

cevap

8

Evet ve hayır.

Temel olarak, tüm kullanıcı denetimlerini web.config dosyasına kaydedebilirsiniz. AŞAĞIDAKİ, usercontrol'lerinizi diğer usercontroller içinde kullanmak istiyorsanız, problemlerle karşılaşırsınız.

Bu nedenle, kullanıcı denetimlerini hiçbir zaman yuvalayamayacaksanız, gitmekte fayda var demektir.

  1. web.config'de hepsini Kayıt ve sonra, yuvalama durumunda, içeri doğrudan iç içe olduğunuz kontrolünü kayıt: Eğer yuva usercontrols esneklik istiyorsanız AMA birkaç seçenek var ana kullanıcı denetimi.
  2. Yukarıda Bryan'ın bahsettiği gibi, kullanıcı denetimlerinizi bir derleme halinde derleyin ve web.config dosyasında başvuru yapın.
  3. Bu en kötü seçenektir, ancak temel olarak denetimlerinizi alt klasörlere yerleştirerek web.config'teki tüm kullanıcı denetimlerinizi kaydederken yuvalama sorununu çözebilirsiniz ... büyük bir seçenek değil.
  4. Başka bir seçenek, usercontrol'lerinizi, kullanıcı denetimleriniz için temel sınıflar oluşturarak güçlü bir şekilde yazmaktır.

Temel olarak, çerçevedeki bir hata değil, her şeyi tek bir derlemede toplamanın bir sonucu değildir. Uygulama esasen kullanıcı kontrolleri arasında ayrım yapamaz.

biraz daha bilgi here ve here. check out the comments on this one

+0

Teşekkürler, bu oldukça havalı. Muhtemelen bir proje Web ve ayrı bir proje oluşturmaya gidiyorum Web.Controls ben yeni proje –

+0

serin yeni başlayana kadar, çalışıp çalışmadığını ve ne kadar kolay olduğunu bilmek istiyorum. iyi şanslar! – andy

1

kayıtlı tüm denetimleri elde etmektir. Birkaç geçici çözüm var ... biri kontrollerinizi ayrı bir projeye koyar ve bunları web.config dosyasında başvurulan tek bir derleme halinde derler.

Şahsen, web.config kaydını atlamayı ve sadece kontrolleri kullanan sayfalarda kaydetmeyi seviyorum. Bu diğer geliştiricilerin web.config kırma sorununu önlerdi.

1

Global.asax adresinin web.config üret var:

protected void Application_Start(object sender, EventArgs e) 
{ 

    Configuration config = WebConfigurationManager.OpenWebConfiguration("~/"); 
    PagesSection webSection = config.GetSection("system.web/pages") as PagesSection; 

    List<TagPrefixInfo> toRemove = new List<TagPrefixInfo>(); 
    foreach (TagPrefixInfo info in webSection.Controls) 
    { 
     if (info.TagPrefix != "asp") 
      toRemove.Add(info); 
    } 

    foreach (TagPrefixInfo list in toRemove) 
    { 
     webSection.Controls.Remove(list); 
    } 

    DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/Controls")); 
    foreach (FileInfo file in di.GetFiles("*.ascx")) 
    { 
     TagPrefixInfo newtag = new TagPrefixInfo("PREFIX", null, null, file.Name.Replace(".ascx",""), string.Concat("~/Controls/", file.Name)); 
     webSection.Controls.Add(newtag); 

    } 

    config.Save(ConfigurationSaveMode.Modified); 
    ConfigurationManager.RefreshSection("system.web/pages"); 

} 

... ve girişlerinin tümünü web.config'de görünecektir.

0

@Jeff Fritz'in çözümünün bir VB.NET uyarlaması. Aynı şeyi yapar, ancak çözümün herhangi bir yerinde bulunan tüm denetimleri içerir. (Bizim mimari SVN externals dahil edilebilir modüllerini kullanır, böylece bu konak uygulama tüm modüllerin kontrollerin farkında olduğundan emin olmak için çok güzel bir yol sağlar.)

Sub RegisterUserControls() 
     Dim Config As Configuration = WebConfigurationManager.OpenWebConfiguration("~/") 
     Dim WebSection As PagesSection = TryCast(Config.GetSection("system.web/pages"), PagesSection) 
     Dim ToRemove As List(Of TagPrefixInfo) = (_ 
       From t As TagPrefixInfo In WebSection.Controls _ 
       Select t Where t.Source IsNot Nothing AndAlso t.Source.EndsWith(".ascx") _ 
      ).ToList 
     For Each t As TagPrefixInfo In ToRemove 
      WebSection.Controls.Remove(t) 
     Next 
     Dim SiteRoot As New DirectoryInfo(Server.MapPath("~")) 
     For Each f As FileInfo In SiteRoot.GetFiles("*.ascx", SearchOption.AllDirectories) 
      Dim Source As String = Path.Combine("~/", f.FullName.Replace(SiteRoot.FullName, "")).Replace("\", "/") 
      Dim TagName As String = Path.GetFileNameWithoutExtension(f.Name) 
      Dim NewTag As New TagPrefixInfo(_ 
       tagPrefix:="YOURPREFIX", _ 
       nameSpace:=Nothing, _ 
       assembly:=Nothing, _ 
       TagName:=TagName, _ 
       Source:=Source) 
      WebSection.Controls.Add(NewTag) 
     Next 
     Config.Save(ConfigurationSaveMode.Modified) 
     ConfigurationManager.RefreshSection("system.web/pages") 
    End Sub 

(Tabii ki bu başvurmak Jeff yaptığı gibi Application_Start.