9

我现在可能完全偏离了轨道,所以我会在这里问这个,以便有人可以帮助我。

我想要做的是将存储在 applicationSettings 区域中的 web.config 中的值插入到我的 aspx 标记中。具体来说,我想从配置中读取一个 URL。这是我使用的 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: ImagesUrl %>,但我没有使用 web.config 的 appsettings 部分,而是使用 configSection。

编辑:我相信我只能使用 ExpressionBuilder 来完成,因为我必须将字符串与单个图像名称连接起来。我更改了上面的示例以反映这一点。

我喜欢下面的 Bert Smith 代码解决方案来访问配置部分,只是我需要将它放在表达式构建器中。我一直在重写 GetCodeExpression 方法,我将从那里调用配置管理器,但我不明白如何构建参数表达式。

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 的示例从表达式生成器返回任何类型的代码:

return new CodeSnippetExpression(entry.Expression);

GetAppSetting 是我的自定义 Page 类中的一种方法。

4

3 回答 3

11

通常,您会创建一个自定义设置类来读取这些值,如本文所述。就个人而言,我只会使用上面建议的 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>

希望这可以帮助。

跟进:

CodeExpression 看起来像这样:

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 的配置添加到 web.config 并从 aspx 调用它,如下所示:

<asp:Label ID="Label1" runat="server" Text="<%$CustomSettings:ImagesUrl %>"></asp:Label>
于 2011-05-20T19:44:35.843 回答
1

它必须在标记中吗?为什么不在代码隐藏中设置它。

Image1.ImageUrl= //fetch your settings here.

另一种方法是在代码隐藏中定义属性或静态方法,然后在标记中使用它。

于 2011-05-20T15:51:50.807 回答
0

我不确定它的 ASP.NET 位,但如果这是你会做的正常代码MyApp.Properties.Settings.Default.ImagesUrl,那么试试

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

不过,存储它肯定会更容易<appSettings>

于 2011-05-20T15:44:54.653 回答