如何从web.config设置图像标记源?

时间:2013-08-09 11:56:33

标签: asp.net web-config imagesource

如何设置image tag source免于阅读html文件中key AppSettings 部分中的web.config

我正在使用一个html文件,其中有一个图片标记,我想从web.config文件密钥设置图像源。

web.config键是:<add key="Image" value="Image.gif" />

但我无法在源上设置密钥。

我试过这个:

 <img src="<%= ConfigurationSettings.AppSettings["Image"] %>" width="685" height="177" />

但不是从那里读源。

3 个答案:

答案 0 :(得分:2)

根据您的评论,您似乎正在尝试生成要通过电子邮件发送的html文件。最好使用place holders创建一个html文件,以获取要注入的信息。使用文本阅读器从文件中读取html,并在文本上使用regex或string.replace替换实际值的place holders

  

您需要拥有图片的完整网址。

e.g。

阅读HTML

var HTML = EmailTemplate.GetHTMLFromTemplate(path to template)

 public static string GetHTMLFromTemplate(string templatepath)
    {
        var TemplateBody = new StringBuilder();

        using (var Reader = new StreamReader(templatepath))
        {
            string Line;
            while ((Line = Reader.ReadLine()) != null)
            {
                TemplateBody.Append(Line);
            }
        }

        return TemplateBody.ToString();
    }

然后替换html的部分

String.Replace("[image placeholder]", ConfigurationManager.AppSettings["Image"]);

电子邮件模板类看起来像这样(这是非常古老的代码!!)

public class EmailTemplate
    {
        public string Body { get; private set; }

        public static EmailTemplate GetTemplate(string body, string url, string html)
        {
            var AmendedHTML = new StringBuilder(html);
            AmendedHTML.Replace("[body]", body);
            AmendedHTML.Replace("../images", url + "images");

            var MyEmailTemplate = new EmailTemplate { Body = AmendedHTML.ToString() };

            return MyEmailTemplate;
        }

        public static EmailTemplate GetTemplate(string body, string title, string url, string year, string html)
        {
            var AmendedHTML = new StringBuilder(html);
            AmendedHTML.Replace("[BODY]", body);
            AmendedHTML.Replace("[HEADING]", title);
            AmendedHTML.Replace("../images", url + "images");
            AmendedHTML.Replace("[DATE]", year);
            AmendedHTML.Replace("[contactus.aspx]", url + "contactus/index.aspx");
            AmendedHTML.Replace("[unsubscribe.aspx]", url + "register/unsubscribe.aspx");

            var MyEmailTemplate = new EmailTemplate { Body = AmendedHTML.ToString() };

            return MyEmailTemplate;
        }

        public static string GetHTMLFromTemplate(string path)
        {
            var TemplateBody = new StringBuilder();

            using (var Reader = new StreamReader(path))
            {
                string Line;
                while ((Line = Reader.ReadLine()) != null)
                {
                    TemplateBody.Append(Line);
                }
            }

            return TemplateBody.ToString();
        }
    }

答案 1 :(得分:1)

试试这个:<img src="<%= System.Web.Configuration.WebConfigurationManager.AppSettings["Image"].ToString() %>" width="685" height="177" />

答案 2 :(得分:1)

您想要替换.html电子邮件模板中的值。

您可以通过将文件读入内存并替换.html文件中的占位符来实现。 将图片标记更改为    <img src="$$image$$" width="685" height="177" />

然后在你的代码中

string myString = "";
using (StreamReader reader = new StreamReader(Server.MapPath("~/Email/Product/<nameofthepage>.html"))) {
myString  = reader.ReadToEnd();   
}
myString = myString.Replace("$$image$$", ConfigurationSettings.AppSettings["Image"]);

然后将邮件的body属性设置为myString