Как мне сообщить JS о корне приложения?
У меня есть JavaScript, который ссылается /jobs/GetIndex
в проекте MVC. Это прекрасно работает, когда я запускаю его локально, потому что у меня есть Controller
называется JobsController
, При его развертывании я развертываю приложение в подпапке "Jobs", что означает, что URL должен стать http://site/jobs/jobs/GetIndex
но это будет http://site/jobs/GetIndex
Я предполагаю, потому что javascript не знает, что такое "корневой URL", и использует сайт в качестве корневого. Как я могу заставить его работать в обеих средах?
2 ответа
Если вы просто хотите получить корневой / базовый URL-адрес сайта, чтобы добавить другой URL-адрес, который вам нужен, вы можете просто использовать /
как первый символ вашего URL.
var urlToJobIndex2= "/jobs/GetIndex";
Вот альтернативный подход, если вы хотите больше, чем просто корень приложения (например, конкретные URL-адреса (построены с использованием вспомогательных методов mvc, таких как Url.RouteUrl
так далее)
Вы можете использовать Url.Content
вспомогательный метод в вашем представлении бритвы, чтобы сгенерировать URL-адрес базы приложения, назначить его переменной javascript и использовать его в своем другом js-коде для создания других URL-адресов.При этом всегда используйте пространство имен javascript, чтобы избежать возможных проблем с глобальными переменными javascript.
Если вы хотите получить URL-адрес для конкретного метода действия, вы можете использовать Url.Action
или же Url.RouteUrl
вспомогательные методы.
Таким образом, в вашем бритвенном представлении (файл макета или конкретный вид) вы можете сделать это.
<script>
var myApp = myApp || {};
myApp.Urls = myApp.Urls || {};
myApp.Urls.baseUrl = '@Url.Content("~")';
myApp.Urls.jobIndexUrl= '@Url.Action("GetIndex","jobs")';
</script>
<script src="~/Scripts/PageSpecificExternalJsFile.js"></script>
И в твоем PageSpecificExternalJsFile.js
файл, вы можете прочитать его как
var urlToJobIndex= myApp.Urls.jobIndexUrl;
// Or With the base url, you may safely add the remaining url route.
var urlToJobIndex2= myApp.Urls.baseUrl+"jobs/GetIndex";
Вот подробный ответ о том же, но используя это в определенной странице / представлении
Угловой Js
Возможно, вам понадобятся правильные относительные URL-адреса в вашем угловом контроллере / службах / директивах. Тот же подход будет работать и для вашего углового кода. Просто создайте объект пространства имен js и используйте угловой value
провайдер для передачи данных вашим угловым контроллерам / службам / директивам, как подробно описано в этом посте с примером кода.
Добавлять <base href="/jobs">
к вашей голове тег. Это укажет рут.
Это дополнительно объясняется здесь https://docs.angularjs.org/guide/$ location