Вот несколько советов, которые я могу вам дать. Прежде всего, вы не должны использовать ResolveUrl
для разрешения действий контроллера, потому что вы все еще жестко программируете и не пользуетесь маршрутами. Что если завтра вы решите изменить определения своего маршрута в global.asax? Вы должны использовать URL-помощники, как это:
<%= Url.Action("Action", "Controller") %>
и для статических ресурсов:
<%= Url.Content("~/scripts/foo.js") %>
Теперь, когда вам нужно определить пути к изображениям в файлах CSS, вы должны знать, что они могут быть относительно расположения файла CSS. Так, например, если вы включите свой CSS следующим образом:
<link href="<%= Url.Content("~/styles/foo.css") %>" rel="stylesheet" type="text/css" />
внутри foo.css
вы можете использовать относительные пути изображения:
.foo {
/** you can safely define relative image paths in relation with the CSS **/
background-image: url(../images/foo.png);
}
и последняя часть являются файлами javascript. Внутри них вы не можете использовать помощников для определения URL. Так что существуют разные техники. Лично мне нравится ненавязчивый javascript с прогрессивным улучшением, означающий, что нужный мне URL уже находится в HTML. Подумайте, например, AJAXifying ссылку или форму. Внутри вашего взгляда у вас будет:
<%= Html.ActionLink("foo bar", "foo") %>
и внутри отдельного javascript мы могли бы AJAXify его:
$('a').click(function() {
$('result').load(this.href);
return false;
});
В некоторых случаях URL-адрес в DOM отсутствует. Таким образом, вы можете использовать глобальную переменную внутри представления:
<script type="text/javascript">
var myurl = '<%= Url.Action("foo") %>';
</script>
и внутри вашего внешнего javascript используйте эту myurl
глобальную переменную.