【问题标题】:how to reference to a image file in <img src/> using RazorEngine for generating HTML Email如何使用 RazorEngine 引用 <img src/> 中的图像文件以生成 HTML 电子邮件
【发布时间】:2014-05-09 21:12:57
【问题描述】:

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

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

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

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

在模型类中

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;
    }

【问题讨论】:

  • 只需在实时网络服务器上输入一个 URL。

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


【解决方案1】:

您可以为此使用Server.MapPathUrl.Content

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

或者

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

【讨论】:

  • 请注意,这仅在他们确实从 Web 环境中运行 RazorEngine 时才有效。可能是一个安全的赌注,因为 OP 使用了 asp.net 标签,但它们可能不是,或者请求来自不可公开访问的 url(我不确定,但我相信你是否从本地请求使用 http://localhost/... 的机器,这也将是生成的 url。)
  • @GeorgeMauer:感谢您指出这一点。我想 OP 会想到这一点,因为否则所有 Url 和其他几个元素都不起作用。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2010-10-14
    • 2016-05-29
    • 2022-10-07
    • 1970-01-01
    • 2013-08-06
    • 2017-06-06
    相关资源
    最近更新 更多