Как добавить параметры в вызов @ Url.Action () из JavaScript при нажатии - PullRequest
6 голосов
/ 17 марта 2011

У меня есть ссылка, при нажатии которой необходимо вызвать действие контроллера с определенными данными, которые должны быть получены с помощью JavaScript. Действие будет возвращать FileStreamResult.

Я посмотрел на @ Url.Action, но я не мог понять, как (или даже если) я мог передать значение словаря, которое нужно было получить через JS.

Итак, я пошел с $ .post из обработчика кликов. У меня проблема в том, что я не уверен, что делать в моем успехе: функция (), чтобы вернуть пользователю результат файлового потока. Или даже если смогу.

Так что любая помощь в том, как вы будете делать что-то подобное, была бы великолепна ..

Ответы [ 2 ]

9 голосов
/ 17 марта 2011

Итак, я пошел с $ .post из обработчика кликов.У меня проблема в том, что я не уверен, что делать в моем успехе: функция (), чтобы вернуть пользователю результат файлового потока.Или даже если смогу.

Точно.Вы не можете многое сделать с полученным байтом в javascritpt: очевидно, вы не можете сохранить его на клиентском компьютере или передать его какой-либо внешней программе на клиенте.Поэтому не вызывайте действия, которые должны возвращать файлы с использованием AJAX.Для этих действий вы должны использовать обычные ссылки:

@Html.ActionLink("download file", "download", new { id = 123 })

и позволить пользователю решать, что делать с файлом.Вы можете поиграть с заголовком Content-Disposition и установить для него inline или attachment в зависимости от того, хотите ли вы, чтобы файл открывался с помощью связанной по умолчанию программы в браузере, или предлагал пользователю диалог сохранения файла.1011 *


ОБНОВЛЕНИЕ:

Кажется, я неправильно понял вопрос.Если вы хотите добавить параметры к существующей ссылке, вы можете подписаться на событие click в javascript и изменить href, добавив необходимые параметры в строку запроса:

$(function() {
    $('#mylink').click(function() {
        var someValue = 'value of parameter';
        $(this).attr('href', this.href + '?paramName=' + encodeURIComponent(someValue));
        return true;
    });
});
0 голосов
/ 17 марта 2011

Вместо того, чтобы переходить к сообщению, я хотел бы связать JQuery с обработчиком щелчка по ссылке, которая будет вызывать действие контроллера.Это предполагает, что метод действия возвращает FileStreamResult и устанавливает правильный тип содержимого, чтобы браузер интерпретировал результат и отображал его соответствующим образом.

При вашем подходе вам придется интерпретировать в onSuccessHandler поста, как визуализировать сгенерированный поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...