在ASP.NET MVC网站的代码中读取bundle中的CSS内容



我有一个网站,它使用引导和引导主题。当网站用户触发某些操作时,我的网站还会向他们发送通知电子邮件。

我希望发送的通知电子邮件的主体是格式良好的HTML内容,具有与主网站相同的外观和感觉。

我一直被教导要编写DRY代码,并使其尽可能地可维护,所以我想在电子邮件中包含我的网站用作嵌入文件的引导CSS,并使用该CSS的HTML正文引用,这样,如果我决定更改网站的主题,它会自动重新设置我的通知电子邮件的样式。

我使用System.Net.Mail.SmtpClient发送电子邮件,并使用AlternateViews添加内容。我不想在离线查看电子邮件时包含对我网站css的实时引用,所以我想嵌入css。

我一直纠结于如何将CSS文件读取为字符串,并将其附加到电子邮件中。在我的BundleConfig中,我有这个:

bundles.Add(new StyleBundle("~/Content/css").Include(
          "~/Content/bootstrap-sandstone.css",
          "~/Content/site.css"));

所以我尝试了:

var css = File.ReadAllText(HttpContext.Current.Server.MapPath("~/Content/css"));

但正如我所想的那样,它抛出了一个FileNotFound异常。

我能用什么让我通过~/Content/css并弹出css?

我找到了一种使用以下代码获取CSS内容的方法:

var cssBundle = BundleTable.Bundles.GetBundleFor("~/Content/css");
var css = cssBundle.GenerateBundleResponse(new BundleContext(new HttpContextWrapper(HttpContext.Current), BundleTable.Bundles, string.Empty)).Content;

然而,正如mason(在评论中)预测的那样,CSS在电子邮件中不起作用,而且它太大了,所以我将简单地在HTML中嵌入基本的CSS。

相关内容

  • 没有找到相关文章

最新更新