最简单的方法是使用html帮助程序.请注意在显示图像文件名之前检查文件系统的额外性能.虽然命中率很小,但除非你的流量非常高,否则你不会发现任何问题.然后,您可以实现某种缓存,以便应用程序“知道”文件是否存在.
您可以使用自定义html帮助程序
public static class ImageHtmlHelpers
{
public static string ImageUrlFor(this HtmlHelper helper,string contentUrl)
{
// Put some caching logic here if you want it to perform better
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
if (!File.Exists(helper.ViewContext.HttpContext.Server.MapPath(contentUrl)))
{
return urlHelper.Content("~/content/images/none.png");
}
else
{
return urlHelper.Content(contentUrl);
}
}
}
然后在您的视图中,您可以使用以下内容制作网址:
" />
编辑:正如吉姆指出的那样,我还没有真正解决尺寸问题.我个人使用自动大小请求管理/大小这是另一个故事,但如果你担心文件夹/大小只是传递信息来构建路径.如下:
public static class ImageHtmlHelpers
{
public static string ImageUrlFor(this HtmlHelper helper,string imageFilename,ImageSizeFolderEnum imageSizeFolder)
{
UrlHelper urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
string contentUrl = String.Format("~/content/userimages/{0}/{1}",imageSizeFolder,imageFilename);
if (!File.Exists(helper.ViewContext.HttpContext.Server.MapPath(contentUrl)))
{
return urlHelper.Content(String.Format("~/content/userimages/{0}/none.png",imageSizeFolder));
}
else
{
return urlHelper.Content(contentUrl);
}
}
}
然后在您的视图中,您可以使用以下内容制作网址:
" />
如果文件夹是一个固定的集合,建议使用Enum以获得更好的编程控制,但是为了快速而讨厌的方法,如果文件夹是db生成的话,不能仅仅使用字符串.