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

时间:2015-03-25 16:53:40

标签: css asp.net bundle resourcebundle server.mappath

我有一个使用bootstrap和bootstrap主题的网站。我的网站在触发某些操作时也会向网站用户发送通知电子邮件。

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

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

我使用System.Net.Mail.SmtpClient发送电子邮件,并使用AlternateViews添加内容。我不希望在线下查看电子邮件时将实时参考包含在我的网站上,因此我想嵌入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?

1 个答案:

答案 0 :(得分:3)

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

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

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