来自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(); 

} 
+0

这工作,但你并不需要编写代码来访问应用程序设置,您可以使用表达式,如 的appSettings> 2014-09-29 14:41:45

复杂的解决方案:

您可以通过创建自己的表达很容易地做到这一点生成器。在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/