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

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

Ответы [ 6 ]

32 голосов
/ 29 марта 2012

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

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

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

    $.ajax({ url: myUrl , . . .
8 голосов
/ 29 марта 2012

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

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

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

$.ajax({ url: baseURL + "Action"
5 голосов
/ 29 марта 2012

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

2 голосов
/ 07 декабря 2014

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

var myUrl = / ControllerName / ActionName;

$.ajax({ url: myUrl , . . 
0 голосов
/ 11 января 2016

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

@Html.Hidden("AppUrl", Url.Content("~"))
0 голосов
/ 11 июля 2013

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

...