Просто нужно было решить эту проблему для одного из моих плагинов jQuery, где желательно не изменять ничего глобального (т.е. выходить за рамки использования плагина), поэтому мне пришлось игнорировать помеченный ответ.
Я также обнаружил, что, поскольку я размещаю DEV локально в IIS, я не могу использовать относительный путь к корню (так как localhost
не является корнем).
Решение, которое я нашел, расширенноес чего я уже начал: атрибут data-controller
, указывающий, какой контроллер использовать в элементе, к которому я применяю свой плагин.Я считаю, что предпочтительнее использовать данные для имен контроллеров, чтобы их можно было легко использовать повторно.
Предыдущий:
<div data-controller="Section">
Решение:
<div data-controller="@Url.Content("~/Section")">
Это вводиткорень сервера (например, /Test.WindowsAzure.Apr2014/
перед именем контроллера, поэтому я получаю /Test.WindowsAzure.Apr2014/Section
, который идеально подходит для добавления actions
и других параметров, которые у вас есть. Это также позволяет избежать абсолютного пути в выводе (который занимаетлишние байты без веской причины).
В вашем случае используйте что-то вроде:
// Assuming $element points to the element your plugin/code is attached to...
var baseUrl = $element.data('controller');
var url = baseUrl + '/service?param1=' + param;
Обновление:
Другой подход, который мы сейчас используем, когда мы не против инъекцийглобальным значением является Razor-инжектирование одной глобальной переменной JavaScript в window
в файле макета с помощью:
<script>
window.SiteRoot = "@Url.Content("~/")";
</script>
и использование его с
var url = window.SiteRoot + '/service?param1=' + param;