Используйте отдельный файл js и используйте в нем URL-помощники с ASP.NEt MVC 3 и Razor View Engine

Я задаю подобный вопрос здесь и Darin Dimitrov ответ, что мы не можем использовать URL-помощник, как $.ajax({ url: '@Url.Action("Index")', . . . в отдельном файле js, так что вы предлагаете использовать помощник Url на странице просмотра и передать его в javascript, я не хочу использовать URL-адрес жесткого кода, мне нужно найти его с помощью помощника Url.?

6 ответов

Решение

Используйте скрытое поле для хранения вашего URL, затем используйте JavaScript, чтобы прочитать скрытое поле, а затем используйте это в своем коде. Таким образом, вы можете сохранить файл JS отдельно от представления. Что-то вроде этого:

//In Your View
    @Html.Hidden("MyURL", Url.Action("Index"))

//In Your JS
    var myUrl = $("#MyURL").val();

    $.ajax({ url: myUrl , . . .

Самый простой способ - просто создать глобальную переменную, называемую чем-то, и просто сослаться на нее во внешнем JS

var baseURL = '@Url.Action("Index")';

Внутри вашего внешнего JS

$.ajax({ url: baseURL + "Action"

Вы можете использовать RazorJS для этой цели. Это позволяет писать Razor-Style C# или VB.NET внутри ваших файлов JavaScript. Краткое описание доступно здесь.

Нет необходимости иметь скрытое поле, даже это работает и во внешнем файле.js.

var myUrl = / ControllerName / ActionName;

$.ajax({ url: myUrl , . . 

Я использовал аналогичный подход к raklos, но искал путь к корневому каталогу во всех местах, поэтому я пошел с кодом ниже.

@Html.Hidden("AppUrl", Url.Content("~"))

Посмотрите на Генерацию внешних файлов JavaScript с использованием частичных видов бритвы. В этой записи блога я опишу, как вы можете использовать обычные представления Razor и пользовательский фильтр действий для рендеринга внешних файлов JavaScript, в которых может быть код Razor.

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