@Url.Content
- это директива интерполяции Razor, которая будет анализироваться только в представлении Razor или в файле страницы (.cshtml
).Ничто другое не проходит через механизм представления Razor, поэтому нельзя ожидать, что он будет работать ни в одном файле, кроме файла CSHTML.
Существует несколько способов передачи данных на стороне сервера в файл JavaScript при загрузке страницы.-time - больше, чем можно было бы покрыть в ответе StackOverflow.В вашем конкретном случае кажется, что вам просто нужно передать корневой URL-адрес скрипту, чтобы он мог вызвать конечную точку.Обычно лучше полностью отобразить URL-адреса действий на стороне сервера, а не создавать их на стороне клиента, если это возможно.Для этого вы можете использовать один из следующих вариантов:
1.Предоставьте глобальную переменную из представления, которое ссылается на этот файл
SomeView.cshtml
<script>
window.Routes = {
getMeters: '@Url.Action("GetMeters", "Meters")', // the GetMeters action on MetersController
// add other routes here
};
</script>
<script src="@Url.Content("~/somescript.js")"></script>
somescript.js
$(document).ready(function() {
var url = Routes.getMeters;
// ...
});
2.Пусть скрипт выставит функцию и вызовет ее из представления
somescript.js
// This function replaces $(document).ready(...)
function initialize(getMetersRoute) {
var url = getMetersRoute;
// ...
}
SomeView.cshtml
<script src="@Url.Content("~/somescript.js")"></script>
<script>
$(document).ready(function() {
initialize('@Url.Action("GetMeters", "Meters")');
});
</script>