Передача данных клиента на сервер для создания файла Excel или CSV - PullRequest
1 голос
/ 09 января 2012

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

Я создаю веб-страницу для отчетов как часть стандартного веб-приложения VB.NET. Страница управляется данными, jquery выполняет вызовы веб-службы, локальной для приложения, чтобы получить значения элементов, которые динамически создаются в DOM. В конечном итоге все эти динамические элементы и их значения заключены в объект JSON, поэтому с клиентской частью все в порядке.

Прямо сейчас я могу передать этот объект JSON методу в веб-сервисе, который создает адаптер данных SQL из значений и запрашивает базу данных. Моя конечная цель состоит в том, чтобы эти данные JSON клиента использовались для запроса к базе данных и создания файла Excel для отправки обратно пользователю или для отказа в этом файле CSV.

Насколько я понимаю (из работы с генерацией PDF-файла), этот тип функции может выполняться только на стороне сервера веб-приложения, даже не из веб-службы (т. Е. Я не могу заставить веб-службу возвращать массив байтов и JavaScript / jQuery представляют это как файл).

Итак, как мне это сделать? Теперь у меня есть объект JSON на стороне клиента, куда я должен его отправлять, как и как мне вернуть мой файл?

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

Мне просто нужно небольшое руководство и небольшая помощь в понимании того, как использовать скрытое поле или что я на самом деле делаю с вызовом AJAX до обратной передачи.

Спасибо.

1 Ответ

2 голосов
/ 09 января 2012

В прошлом я делал подобные вещи, используя страницу универсального обработчика (ASHX).Если вы установите тип содержимого ответа HttpContext.Response.ContentType равным text/csv, и вы вызовете

window.location = "handler.ashx";

Это будетсгенерируйте файл csv на стороне сервера и загрузите в браузер пользователя.Вы можете попробовать передать JSON как QueryString и проанализировать его на странице обработчика, чтобы сделать все, что вы хотите на стороне сервера, чтобы сгенерировать CSV.

Пример кода:

Public Sub ProcessRequest(context As HttpContext)
    context.Response.ContentType = "text/csv"
    context.Response.AddHeader("Content-Disposition", "attachment;filename=test.csv")
    Dim json As String = context.Request.QueryString("json")
    Using sw As New StreamWriter(context.Response.OutputStream)
        sw.WriteLine("Test!")
        sw.Flush()
    End Using
End Sub

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

РЕДАКТИРОВАТЬ: Извините за прочтение той части, что вы сказали, что код был VB.Net.Изменил код c # на VB.net

...