Как мне сообщить 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

Другие вопросы по тегам