来自Web配置的动态图像位置
问题描述:
我是.NET新手,我想将图像添加到ASPX页面(WebForms),但我希望图像位置可以在Web配置文件中配置。我发现的一切都比我预期的要复杂得多。下面,ASPX页面的第一行是我试图去工作,而第二行工作正常,图像位置硬编码。我错过了什么?来自Web配置的动态图像位置
ASPX页面:
<asp:Image ID="MainLogo" runat="server" ImageUrl='<%=MainLogo%>' />
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/main-logo.png" />
代码背后:
public partial class SiteMaster : MasterPage
{
public string MainLogo = WebConfigurationManager.AppSettings["MainLogoLocation"];
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = WebConfigurationManager.AppSettings["SiteTitle"];
}
}
Web配置:
<add key="MainLogoLocation" value="~\Images\main-logo.png"/>
答
在Web配置 您可以设置路径
<add key="MainLogoLocation" value="~\Images\main-logo.png"/>
在aspx页面
<asp:Image ID="Image1" runat="server"/>
CS代码 保护无效的Page_Load(对象发件人,EventArgs的)
{
Image1.ImageUrl= WebConfigurationManager.AppSettings["MainLogoLocation"].ToString();
}
答
复杂的解决方案:
您可以通过创建自己的表达很容易地做到这一点生成器。在ASP.Net中,表达式看起来像<%$ SomePrefix:SomeProperty%>。
表达式构建器使用前缀在web.config中注册。因此,上面的代码会调用一个前缀为“SomePrefix”的表达式构建器,并请求“SomeProperty”
创建自定义表达式构建器并不困难。你基本上只是创建一个继承自“ExpressionBuilder”的类,然后实现GetCodeExpression和GetEvalData方法。
然后,您必须在web.config中注册它,例如,
<system.web>
<compilation debug="true">
<expressionBuilders>
<add expressionPrefix="path"
type="XYZ.PathExpressionBuilder, YourAssemblyName"/>
</expressionBuilders>
</compilation>
</system.web>
http://haacked.com/archive/2006/11/29/Express_Yourself_With_Custom_Expression_Builders.aspx/
这工作,但你并不需要编写代码来访问应用程序设置,您可以使用表达式,如的appSettings>
2014-09-29 14:41:45