根据所选主题更改图像来源的最佳方法是什么?理想情况下,您将为每个主题设置一个CSS,并将图像设置为背景(例如我现在所做的)。
然而,我现在需要做的是使用实用的图像并且是演示的一部分,它不仅仅是作为设计一部分的图像。根据主题,此图像看起来会略有不同。
我正在保存每个用户在数据库中选择的主题。我希望能够在用户根据数据库中的主题请求页面时更改图像的来源。我正在使用依赖注入(StructureMap),MVC 4和EF 5.我想以某种方式为我的_Layout页面中的ViewBag.MyImagePath赋值,然后所有页面都只有src =“@ ViewBag.MyImagePath”。
答案 0 :(得分:1)
您可以编写一个主题感知图片助手:
public static class HtmlExtensions
{
public static IHtmlString ThemeAwareImage(
this HtmlHelper htmlHelper,
string image,
string alt = ""
)
{
var context = htmlHelper.ViewContext.HttpContext;
var theme = context.Session["theme"] as string;
if (string.IsNullOrEmpty(theme))
{
// the theme was not found in the session
// => go and fetch it from your dabatase
string currentUser = context.User.Identity.Name;
theme = GetThemeFromSomeDataStore(currentUser);
// cache the theme in the session for subsequent calls
context.Session["theme"] = theme;
}
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var img = new TagBuilder("img");
img.Attributes["alt"] = alt;
img.Attributes["src"] = urlHelper.Content(
string.Format("~/images/{0}/{1}", theme, image)
);
return new HtmlString(img.ToString(TagRenderMode.SelfClosing));
}
}
可以在视图中用于渲染这些图像:
@Html.ThemeAwareImage("foo.jpg", "This is the foo image")
作为使用Session
存储当前用户主题的更好选择,您可以将其缓存在Cookie中,甚至可以更好地使其成为您的路线的一部分,在这种情况下,您的网站将更加符合SEO。< / p>