如何使用RazorEngine引用<img src=""/>中的图像文件来生成HTML电子邮件

时间:2014-03-30 15:57:37

标签: c# asp.net razor html-email razorengine

我正在使用RazorEngine库生成HTML电子邮件。在HTML电子邮件中,我想要包含我客户的徽标图像。但是,我有问题显示它。我在.cshtml文件中定义了我的html模板。徽标图像位于&#34;〜/ Images / Logo.png&#34;。我已验证图像文件已复制到服务器,“复制到输出目录”设置为“始终复制”。

所以我的问题是如何在.cshtml中定义src属性的表达式?

<img src="@????"/>

编辑(我的解决方案):好的,我认为有一种直接的方法可以从TemplateBase中检索。我猜不会。所以我只是使用GetSiteRootUrl()方法获取根网站URL并将其添加到我的Image的网址中,然后将其设置为我的Model类中的属性。

在模型类

LogoImageUrl = GetSiteRootUrl() + "Images/logo.png";

.cshtml定义

<img src="@Model.LogoImageUrl" />

获取网站根网址

的方法
public static string GetSiteRootUrl()
    {
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port
                                    );
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }

2 个答案:

答案 0 :(得分:3)

"~"通常表示&#34;使用此网络请求的根网址&#34; ,由于电子邮件未附加到网络请求,因此无法解决该问题。而是使用完整的URL到您的服务器。如果您在多个文件中使用它,我建议将其放入web.config文件中的appSetting中,这样您就可以更改它而无需查找 - 替换一堆文件。

答案 1 :(得分:2)

您可以使用Server.MapPathUrl.Content

<img src="@Server.MapPath("~/Images/Logo.png")"/>

或者

<img src="@Url.Content("~/Images/Logo.png")"/>