我现在可能完全偏离正轨,所以我会在这里问这个,所以有人可以帮助我。
我想要做的是将存储在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
我知道有一个表达式&lt;%$ AppSettings:ImagesUrl%&gt;,但我没有使用web.config的appsettings部分,而是使用configSection。
编辑: 我相信我只能用ExpressionBuilder来做,因为我必须将字符串与单个图像名称连接起来。我改变了上面的例子来反映这一点。
我喜欢下面的Bert Smith Code Solution来访问配置部分,只需要将它放在表达式构建器中。 我一直在重写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的示例从表达式构建器返回任何类型的代码:
返回新的CodeSnippetExpression(entry.Expression);
GetAppSetting是我的自定义Page类中的一种方法。
答案 0 :(得分:11)
通常,您会创建一个自定义设置类来读取这些值,如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>
希望这有帮助。
跟进:
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文件夹中。将自定义快速的配置添加到web.config并从aspx中调用它,如下所示:
<asp:Label ID="Label1" runat="server" Text="<%$CustomSettings:ImagesUrl %>"></asp:Label>
答案 1 :(得分:1)
它必须是标记吗?为什么不在代码隐藏中设置它。
Image1.ImageUrl= //fetch your settings here.
另一种方法是在代码隐藏中定义属性或静态方法,然后在标记中使用它。
答案 2 :(得分:0)
我不确定它的ASP.NET位,但如果这是普通代码你会MyApp.Properties.Settings.Default.ImagesUrl
,所以试试
<asp:Image ID="Image1" runat="server"
ImageUrl="<%$MyApp.Properties.Settings.Default.ImagesUrl%>
尽管如此,将它存储在<appSettings>
中肯定会更容易。