Как сохранить HTML в текстовый документ?

197
21 марта 2018, 03:44

Имеется большой список с checkbox-ами. Пользователь с помощью checkbox-ов отмечает некоторые элементы этого списка. При нажатии на кнопку сохраняются все значения отмеченных checkbox-ов (Атрибуты name='ind' и value='@term.Id'). С помощью JQuery получаю массив значений:

var Marks = $("input[name=ind]:checked").serialize();

Данные принимают вид

ind=1&ind=2 ...

Далее открываю новое окно (передаю данные через адресную строку):

window.open(url+Marks, "Выгрузка");

Сервер обрабатывает Get запрос следующим образом:

        public ActionResult UnloadTerms(int[] ind)
    {
        HttpContext.Response.Clear();
        HttpContext.Response.Charset = "";
        HttpContext.Response.ContentType = "application/msword";
        string strFileName = "Выгрузка " + DateTime.Now.ToString("dd:MM:yyyy") + ".doc";
        HttpContext.Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);
        StringBuilder strHTMLContent = new StringBuilder();
        foreach (int id in ind)
        {
            TermCardViewModel model = new TermCardViewModel(Manager.GetTerm(id), Manager.GetDefinitionsList(id, 0), Manager.GetAssociationsList(id));
            if (model.Term != null)
            {
                strHTMLContent.Append(RenderViewToString(this, "Partial/PartialTermCardForWord", model));
                strHTMLContent.Append("<br /><br /><br />");
            }
        }
        HttpContext.Response.Write(strHTMLContent);
        HttpContext.Response.End();
        HttpContext.Response.Flush();
        return View();
    }

Грубо говоря, я формирую частичное представление для каждого элемента с ID из массива ind, а затем склеиваю всё вместе и отдаю пользователю. У него открывается окно сохранения файла, файл сохраняется, всё отлично.

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

Открываю новое окно, чтобы пользователь мог работать в старом, пока выполняется "выгрузка".
Собственно вопрос: можно ли как-то иначе передать большой объем данных в новое окно или осуществлять выгрузку в основном без временной потери работоспособности?

Answer 1

Если никак не получается сократить длинный URL, но работать с ним нужно, то можно воспользоваться директивами настройки веб-сервера для увеличения значений:

для apache LimitRequestLine

Пример: LimitRequestLine 4094

для nginx large_client_header_buffers

Пример: large_client_header_buffers 4 8k;

READ ALSO
Помогите устранить ошибку Bad value for attribute rel on element a

Помогите устранить ошибку Bad value for attribute rel on element a

Имеется список переключающихся ссылок с трансляцией youtube

223
Воспроизвести градиенты с помощью CSS или SVG (неважно как) [требует правки]

Воспроизвести градиенты с помощью CSS или SVG (неважно как) [требует правки]

Здравствуйте, достались градиенты в png, не могу разобраться какие цвета на какие наслаиваются, чтобы получить нужный эффектПомогите пожалуйста...

244
Как раскрасить каждое слово заголовка?

Как раскрасить каждое слово заголовка?

Как раскрасить каждое слово заголовка h2 в разный цвет с помощью css?

214
Как сделать border для маркера?

Как сделать border для маркера?

В списке под каждым li стоит border-bottom, но он не распространяется на маркерМожно ли как то подчеркнуть li вместе с маркером?

194