2011-05-20 18 views
8

Şimdiye kadar tamamen kapalı olabilirim, bu yüzden birileri bana yardım edebilmek için bunu burada soracağım.Web.config uygulamasından değer alın ASP.NET biçimlendirmesine ayarlamaSertings

Yapmak istediğim, bir uygulamaSettings alanında depolanmış web.config sayfamdan aspx işaretlemeye bir değer eklemektir. Özellikle, bir URL'yi yapılandırmadan bulmak istiyorum. Şimdi böyle işaretlemesinde yukarıdaki değerini başvurmak istiyorum

<applicationSettings> 
<MyApp.Properties.Settings> 
    <setting name="ImagesUrl" serializeAs="String"> 
    <value>http://resources/images/</value> 
    </setting> 

: Bu benim Sonra o dosyada

<configSections> 
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=123456"> 
    <section name="MyApp.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=12345" requirePermission="false" /> 
</configSections> 

kullanmak fiili şöyle ayarlardır configSection kurulduğundan

<asp:Image ID="Image1" runat="server" ImageUrl="<%$AppSettings:ImagesUrl%>/Image1.jpg 

Mevcut bir ifade var biliyorum <% $ AppSettings: ImagesUrl%>, ancak configSection yerine web.config uygulama ayarları bölümünü kullanmıyorum.

DÜZENLEME: Sadece ExpressionBuilder ile yapabileceğime inanıyorum, çünkü dizeyi tek tek görüntü adıyla birleştirmem gerekiyor. Bunu yansıtmak için yukarıdaki örneği değiştirdim.

Konfigürasyon bölümüne erişmek için aşağıdaki Bert Smith Kod Çözümü'nü seviyorum, sadece bir ifade oluşturucuya koymam gerekiyor. Yapılandırma Yöneticisi'ni çağırdığım yerden GetCodeExpression yöntemini geçersiz kıldım ama parametreleri nasıl ifade edeceğimi anlamıyorum.

public class SettingsExpressionBuilder: ExpressionBuilder 
{ 
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) 
    { 
     return ?? 
    } 

DÜZENLEME
sonuçta aşağıdaki gibi görünüyor ve her türlü dosyalar, sadece görüntüleri için çalışır:

<asp:ScriptReference Path='<%$Code:GetAppSetting("ResourcesUrl","JS/jquery/jquery.jqplot.js")%>' 

ve ben sadece her türlü dönmek için Microsoft'tan örnek kullandı İfade oluşturucudan gelen kod:

yeni CodeSnippetExpression döndürün (entry.Expression);

Ve GetAppSetting, özel Sayfa sınıfımdaki bir yöntemdir.

+0

o görüntünün bağlantıları depolamak eğer Bir web.config dosyasındaki kaynaklar, o zaman evet çok fazla kapalıdır. – NotMe

+0

Yansıma üzerine, ben * yanlış okuyor olabilir. Harici referansın başlangıç ​​bölümünü mi yoksa tüm görüntü konumunu mı saklıyorsunuz? Bu bir sonraki soruya yönelir: aslında birden fazla ortamı (test, sahne, ürün) desteklemek için mi? – NotMe

+0

Evet, sadece URL'nin ilk kısmı, bu yüzden farklı ortamlarda bunu değiştirebilirim –

cevap

10

Tipik olarak, bu değerleri okumak için özel bir ayarlar sınıfı oluşturursunuz, çünkü bu artical açıklar. Şahsen, appSettings'i yukarıda önerildiği gibi kullanacağım, çünkü bu mevcut işlevsellik ve yaptığınız iş yüzeyin yeterli göründüğünden.Ben ayarı

protected string GetCustomSetting(string Section, string Setting) 
{ 
    var config = ConfigurationManager.GetSection(Section); 

    if (config != null) 
     return ((ClientSettingsSection)config).Settings.Get(Setting).Value.ValueXml.InnerText; 

    return string.Empty; 
} 

almak için korumalı bir işlevi yarattı arkasında

kodu:

Ancak, koşullar bilmeden senin yapmaya teşebbüs neler şöyle özel ayarlar olmadan çözülebilir Daha sonra aspx işaretlemesinde bu işlevi çağıracağım ümidiyle .

Takibi:

CodeExpression bu gibi bir şey olacaktır: Benim Testi

public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) 
{ 
    var config = ConfigurationManager.GetSection("applicationSettings/MyApp.Properties.Settings"); 
    return new CodePrimitiveExpression(((ClientSettingsSection)config).Settings.Get(entry.Expression).Value.ValueXml.InnerText); 
} 

, ben CustomSettingsExpressionBuilder adında bir sınıf oluşturabilir ve App_Code klasörüne eklendi. özel yapılandırma web.config için ifade eklendi ve şöyle aspx onu seslendi: .. söyleyebilirim "Şimdiye kadar pist dışında tamamen olabilir"

<asp:Label ID="Label1" runat="server" Text="<%$CustomSettings:ImagesUrl %>"></asp:Label> 
+0

Bu fikri beğenirim, ancak sunucu denetimlerinde özel işlevleri kullanamıyorum. _ "Sunucu etiketleri <%...%> yapılarını kapatamıyor" _ –

+0

Umarız takip bölümü sizin aradığınız şeydir. Gerekirse, tüm sınıfı yayınlayabilirim, ama doğru yöne doğru yönlendirilmiş gibiydi. –

+0

Sonunda uyguladığım şey bu değildi ama yaklaştı. Sorun şu ki, exprBuilder'de "giriş" dizesini ayırabildiğim veya birden fazla parametreye sahip olmadığım sürece, hala resim adını ekleyemiyorum. Bu yüzden şimdi bir blog yayınından aldığım başka bir expressionBuilder kullanıyorum, bu da geçerli bir C# kodu derler. İstenen appSetting dizesini döndüren bir yöntem oluşturdum ve yalnızca resim adını birleştirebiliyorum. <% $ Kodu: GetAppSetting ("ResourcesUrl") + "images/image.jpg"%> –

0

Bundan ASP.NET bit hakkında emin değilim, ama bu normal bir kod olup olmadığımı MyApp.Properties.Settings.Default.ImagesUrl yaramaz, yani çalışacaktı

<asp:Image ID="Image1" runat="server" 
      ImageUrl="<%$MyApp.Properties.Settings.Default.ImagesUrl%> 

Kesinlikle olsa <appSettings> bu depolamak için daha kolay olurdu .

1

Biçimlendirmeli mi? Neden bunu kod arkasına koymuyorsun?

Image1.ImageUrl= //fetch your settings here. 

Bir başka yolu kod arkada bir özellik veya statik yöntemini tanımlayan ve daha sonra kullanarak olurdu işaretlemesinde söyledi.