MVC2 IIS - Правильно ли разрешать URL-адреса во внешних таблицах стилей и сценариях при развертывании? - PullRequest
0 голосов
/ 06 февраля 2011

Я изменил свой проект Visual Studio MVC2 на отладку на локальном сервере IIS, но у меня возникли проблемы с разрешением URL-адресов.

Вместо жесткого кодирования ссылок, скажем, для запроса ajax, яТеперь необходимо использовать метод ResolveUrl () следующим образом:

<%= ResolveUrl("~/Controller/Action")%>

Что хорошо, когда JavaScript находится в представлении.Но у меня есть javascript во внешних файлах .js, и я не могу использовать функцию ResolveUrl () внутри.

Эта проблема также влияет на ссылки на изображения во внешних таблицах стилей.

Мне кажется,Мне не нужно вручную менять эти ссылки каждый раз, когда я перехожу с веб-сервера Visual Studio на локальный веб-сервер IIS на действующий развернутый веб-сервер.

Как лучше всего обойти это?

Пока что все, о чем я могу думать, это использовать относительный путь, такой как ../Content/Images/image.gif

Ответы [ 2 ]

2 голосов
/ 06 февраля 2011

Вот несколько советов, которые я могу вам дать. Прежде всего, вы не должны использовать 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 глобальную переменную.

1 голос
/ 06 февраля 2011

Итак, я хотел бы предложить, чтобы в вашем файле c # у вас было скрытое текстовое поле, и вы записали абсолютный путь к нему и добавили свой путь к внешнему файлу js после чтения из текстового файла.

Но я действительно не вижу никакой выгоды от загрузки другого файла js из файла js. Просто загрузите все файлы одновременно, и мы перейдем условно в файл yoiur js. Я предполагаю, что вы загружаете другой файл js из самого файла js, потому что вы хотите выполнить какое-то действие при загрузке файла js. вы можете добиться того же, просто вызвав функцию в следующем файле в window.load первого файла ... это ваша конечная цель?

Не думаю, что вы поняли, во что я ввязался.

Скажем, вам нужно сделать обратную передачу, чтобы выполнить контроллер Food and action GetMenu, тогда на странице aspx у вас будет скрытое поле со значением, установленным следующим образом:

<input type="hidden" id="hidden-getmenu-locator" value=<%=Url.Action("GetMenu","Food") %> />

и относительно ваших css и js вы можете получить их следующим образом:

<script type="text/javascript" src="<%=Url.Content("~/Scripts/jquery-ui-1.8.custom.min.js")%>"></script>

или снова сохраните в скрытом поле и затем используйте его.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...