Получить значение из web.config applicationSettings в ASP.NET разметка

я, возможно, полностью сбился с пути, поэтому я просто спрошу это здесь, чтобы кто-то мог мне помочь.

что я хочу сделать, это вставить значение из своей паутины.конфигурация, хранящаяся в области applicationSettings, в моей разметке aspx. В частности, я хочу reade URL из config. Это настройка configSection, которую я использую

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

позже в этом файле находятся фактические настройки, такие как:

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

теперь я хочу ссылаться на приведенное выше значение в разметке, как это:

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

Я знаю, что есть выражение , но я не использую часть appsettings в интернете.config, скорее configSection.

изменить: Я считаю, что могу сделать это только с ExpressionBuilder, потому что я должен объединить строку с именем отдельного изображения. Я изменил пример, чтобы отразить это.

мне нравится решение кода Берта Смита ниже для доступа к разделу конфигурации, только мне нужно поместить его в построитель выражений. Я застрял в переопределении метода GetCodeExpression, откуда я бы вызвал Configuration Manager, но я не понимаю, как построить выражение параметры.

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

редактировать
Результат выглядит так и работает для всех видов файлов, а не только для изображений:

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

и я просто использовал пример от Microsoft, чтобы вернуть любой код из построителя выражений:

вернуться новый CodeSnippetExpression(запись.Выражение);

и GetAppSetting-это метод в моем классе пользовательских страниц.

3 ответов


обычно вы создаете пользовательский класс настроек, чтобы прочитать эти значения как это artical описывает. Лично я бы просто использовал appSettings, как предложено выше, поскольку это существующая функциональность и для того, что вы делаете на поверхности, кажется адекватным.

однако, не зная ваших обстоятельств, что ваша попытка не может быть решена без пользовательских настроек вот так:

в коде я создал защищенную функцию получить настройки

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;
}

тогда в разметке aspx я называю эту функцию

<div>
    <label runat="server" id="label"><%=GetCustomSetting("applicationSettings/MyApp.Properties.Settings", "ImagesUrl") %></label>
</div>

надеюсь, что это помогает.

Дальнейшие Действия:

выражение кода будет выглядеть примерно так:

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);
}

в моем тесте я создал класс под названием CustomSettingsExpressionBuilder и добавил его в папку app_code. Добавлена конфигурация для пользовательского express в интернете.config и вызвал его из aspx так:

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

Это должно быть в разметке? Почему бы тебе не ввести код.

Image1.ImageUrl= //fetch your settings here.

другой способ-определить свойство или статический метод в вашем коде, а затем использовать его в разметке.


Я не уверен насчет ASP.NET немного, но если бы это был обычный код, вы бы сделали MyApp.Properties.Settings.Default.ImagesUrl, Так что попробовать

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

было бы определенно проще хранить это в <appSettings> хотя.