Я задаю аналогичный вопрос здесь и Darin Dimitrov
ответ, что мы не можем использовать помощник Url, например $.ajax({ url: '@Url.Action("Index")', . . .
, в отдельном файле js, так что вы предлагаете используйте Url helper на странице просмотра и передайте его в javascript, я не хочу использовать URL-адрес жесткого кода, мне нужно найти его с помощью помощника Url.?
Используйте файл Seprate js и используйте помощники Url в нем с ASP.NEt MVC 3 и Razor View Engine
Ответ 1
Используйте скрытое поле для хранения своего URL-адреса, затем используйте javascript для чтения скрытого поля, а затем используйте его в своем коде. Таким образом, вы можете сохранить JS файл отдельно от представления. Что-то вроде этого:
//In Your View
@Html.Hidden("MyURL", Url.Action("Index"))
//In Your JS
var myUrl = $("#MyURL").val();
$.ajax({ url: myUrl , . . .
Ответ 2
Самый простой способ - просто создать глобальную переменную, называемую чем-то, и просто ссылаться на нее в вашем внешнем JS
var baseURL = '@Url.Action("Index")';
Внутри вашего внешнего JS
$.ajax({ url: baseURL + "Action"
Ответ 3
Вы можете использовать RazorJS для этой цели. Это позволяет писать Razor-Style С# или VB.NET внутри ваших файлов JavaScript. Существует краткое описание здесь.
Ответ 4
Нет необходимости иметь скрытое поле, даже это работает также во внешнем файле .js.
var myUrl =/имя_контроллера/имя_пользователя;
$.ajax({ url: myUrl , . .
Ответ 5
Взгляните на Создание внешних файлов JavaScript с использованием частичных просмотров бритвы. В этом сообщении в блоге я описываю, как вы можете использовать регулярные представления Razor и настраиваемый фильтр действий для визуализации внешних файлов JavaScript, которые могут иметь в них код Razor.
Ответ 6
Я использовал аналогичный подход к raklos, но искал, чтобы получить корневой путь каталога во всех местах, поэтому я пошел с кодом ниже.
@Html.Hidden("AppUrl", Url.Content("~"))