Лучший ответ, который я могу дать, - никогда не пытаться запрашивать какой-либо контент непосредственно из самого представления.
Вместо этого создайте HTML-помощники для обработки этих запросов и укажите только фактический путь к файлам в этих помощниках.,Таким образом, когда вещи неизбежно перемещаются вокруг вас, вы меняете путь один раз в вашем помощнике, и каждое представление просто работает.это пример моего помощника по изображениям, я думаю, что украл это у Роба Конери и его удивительного примера Tekpub MVC.
В этом классе я объявляю статические переменные pubdir (для моего каталога содержимого) и imageDir (для моих изображенийвложенная папка в моем каталоге содержимого)
public static string Image(this HtmlHelper helper, string fileName, string attributes)
{
fileName = string.Format("{0}/{1}/{2}", pubDir, imageDir, fileName);
if (string.IsNullOrEmpty(attributes))
{
return string.Format("<img src='{0}'/>", helper.AttributeEncode(fileName));
}
var temp = string.Format("<img src='{0}' '{1}' />", helper.AttributeEncode(fileName), helper.AttributeEncode(attributes));
return temp;
}
Я перегрузил это другим методом, когда все, что у меня есть, это имя файла.
public static string Image(this HtmlHelper helper, string fileName)
{
return Image(helper, fileName, "");
}
Теперь, когда я хочу изображение в моем представлении, я вызываю
@Html.Image("hello.jpg")
Все, что я указываю, - это имя файла, и тег изображения возвращается мне.Вы можете сделать это дальше (если хотите) и создать метод HelloImage, который не принимает аргументов, где вы указываете имя файла в реальном методе, если изображение когда-либо переименовано.
Я сделалэто для таких вещей, как баннеры и логотипы, которые используются снова и снова.Я начал делать то же самое для ссылок на действия, в случае, если контроллеры, действия и области перемещены или переименованы.
http://codingsmith.co.za/extending-the-actionlink-helper-in-mvc/