Помогите с Ajax методом "пост к действию" - PullRequest
1 голос
/ 28 сентября 2011

Я новичок в MVC, мне нужна небольшая помощь.

На мой взгляд, я делаю пост ajax, как показано ниже.

 function PostCheckedPdf(e) {

            var values = new Array();
            $('input:checked').each(function () { values.push(this.value); });
            $.post("/UnregisteredUserPreview/DownloadPdfInvoice",
            { checkedList: values });
       }

Этот пост содержит значения любых флажков, которыепроверил внутри стороннего компонента Grid (Telerik).Метод Action получает массив в порядке и проходит через каждое значение, представляя отчет в формате PDF и помещая отчет в ZipStream, который присоединен к Ответу.После завершения цикла zipstream закрывается, и я возвращаю View ();

Когда действие вызывается через $ .post, оно запускается через метод действия, но в браузере ничего не происходит.

ЕслиЯ вызываю Действие через ссылку действия (с парой жестко закодированных значений вместо передачи значений, отмеченных флажками), загружается zip-файл со всеми файлами pdf.

Что я делаю неправильно или как я могу опубликоватьпроверенные значения с помощью ActionLink?

Заранее спасибо!

Тоби.

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Вы делаете Ajax-вызов на сервер, и клиентский код должен получить возвращенный результат, который, по-видимому, там не выполняется.Это должно быть примерно так:

$.ajax({

  type: 'POST'
  url: '/UnregisteredUserPreview/DownloadPdfInvoice',
  data: { checkedList: values },
  success: function (r) {

      alert(r.result);
  }

});

И предположим, что ваш контроллер выглядит следующим образом:

public ActionResult DownloadPdfInvoice() { 

    //do you stuff here
    return Json(new { result = "url_of_your_created_pdf_might_be_the_return_result_here"});
}

ПРИМЕЧАНИЕ

Если вы публикуете свои данные с тегом anchor, лучше запретить действие этого тега по умолчанию, чтобы он не делал ничего другого, кроме того, о чем вы говорите.Вы можете сделать это, добавив следующий код в конце функции click:

$("#myLink").click(function(e) { 

    //do the logic here
    //ajax call, etc.

    e.preventDefault();
});

Посмотрите также на сообщение в блоге ниже.Это может расширить ваши мысли:

http://www.tugberkugurlu.com/archive/working-with-jquery-ajax-api-on-asp-net-mvc-3-0-power-of-json-jquery-and-asp-net-mvc-partial-views

1 голос
/ 28 сентября 2011

Разница в том, что ваш ActionLink испускает тег <a>, который выполняет операцию GET.Браузер интерпретирует содержимое ответа и открывает файл PDF.

Ваш метод jQuery выполняет POST, но ничего не делает с ответом и, таким образом, молча выбрасывает его в фоновом режиме.

Вам нужно что-то сделать с возвращаемым содержимым , как записать это в другое окно.

var w = window.open('', '', 'width=800,height=600,resizeable,scrollbars');

$.post("/UnregisteredUserPreview/DownloadPdfInvoice",
      { checkedList: values }, 
      function(content){
          w.document.write(content);
          w.document.close(); // needed for chrome and safari
      });
...