Самый простой способ сделать это с помощью помощника 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);
}
}
}
Тогда, по вашему мнению, вы можете просто сделать URL, используя:
<img src="<% Html.ImageUrlFor("~/content/images/myfolder/myimage.jpg"); %>" />
РЕДАКТИРОВАТЬ: Как указал Джим, я на самом деле не решал проблему с размерами. Лично я использую автоматическое управление запросами на размер / размер, что является совсем другой историей, но если вы беспокоитесь о папках / размерах, просто передайте эту информацию для построения пути. Как показано ниже:
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);
}
}
}
Тогда, по вашему мнению, вы можете просто сделать URL, используя:
<img src="<% Html.ImageUrlFor("myimage.jpg", ImageSizeFolderEnum.Small); %>" />
Предложили Enum для лучшего программного управления, если папка является фиксированным набором, но для быстрого и неприятного подхода, а не причина, почему вы не можете просто использовать строку, если папка генерируется в дБ и т. Д.