Обратная передача с измененной строкой запроса из раскрывающегося списка в ASP.NET - PullRequest
2 голосов
/ 26 августа 2008

На моей странице asp.net будут отображаться различные элементы управления, в зависимости от того, какой отчет выбрал пользователь, например. некоторые отчеты требуют 5 раскрывающихся списков, некоторые два флажка и 6 раскрывающихся списков).

Они могут выбрать отчет двумя способами. С SelectedReport=MyReport в строке запроса или выбрав его из выпадающего списка. И они обычно приходят на страницу с SelectedReport в строке запроса, а затем изменяют выбранный отчет в раскрывающемся списке.

У меня вопрос, есть ли способ заставить выпадающий список изменять строку запроса, когда она выбрана? Поэтому я бы хотел SelectedReport=MyNewReport в строке запроса и странице, чтобы отправить обратно.

В данный момент он выполняет обычную обратную передачу, которая оставляет SelectedReport=MyReport в строке запроса, даже если это не текущий выбранный отчет.

Редактировать: И мне также нужно сохранить ViewState.

Я пытался сделать Server.Transfer(Request.Path + "?SelectedReport=" + SelectedReport, true) в обработчике событий для Dropdown, и это работает с умом, к сожалению, потому что это Server.Transfer (для сохранения ViewState) вместо Response.Rirectirect URL отстает от того, что показано.

Может быть, я спрашиваю о невозможном или делаю это совершенно неправильно.

@ Craig Коллекция QueryString доступна только для чтения и не может быть изменена.
@ Джейсон Это было бы здорово, если бы я не потерял ViewState, не так ли? (Извините, я добавил это после просмотра вашего ответа).

Ответы [ 6 ]

3 голосов
/ 26 августа 2008

Вам нужно отключить автоответчик в раскрывающемся списке - затем вам нужно подключить некоторый код JavaScript, который будет выполнять эту роль - в коде обработчика событий для события onchange для раскрывающегося списка вы должны создать URL-адрес на основе текущее выбранное значение из выпадающего списка и используйте javascript для запроса этой страницы.

РЕДАКТИРОВАТЬ: Вот несколько быстрых и грязных кодов, которые указывают на то, что будет делать трюк:

<script>
    function changeReport(dropDownList) {
        var selectedReport = dropDownList.options[dropDownList.selectedIndex];
        window.location = ("scratch.htm?SelectedReport=" + selectedReport.value);
    }
</script>

<select id="SelectedReport" onchange="changeReport(this)">
    <option value="foo">foo</option>
    <option value="bar">bar</option>
    <option value="baz">baz</option>
</select>

Очевидно, вам нужно будет сделать немного больше, но это работает и даст вам то, что вам нужно. Я бы рекомендовал использовать инструментарий JavaScript (я использую MochiKit, но не для всех), чтобы выполнить более сложную работу - используйте ненавязчивые методы JavaScript, если это вообще возможно (в отличие от того, что я использую в этом примере).

@ Ray: Вы используете ViewState ?! Я так виноват. : P Почему, в этом случае, вам нужно сохранить его. скажите, пожалуйста?

0 голосов
/ 06 июня 2013

Вы можете использовать следующую функцию для изменения строки запроса при обратной передаче в asp.net с помощью сценария Webresource.axd, как показано ниже.

var url = updateQueryStringParameter(window.location.href,
                                     'Search',
                                     document.getElementById('txtSearch').value);
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("searchbutton", "",
                                  true, "aa", url, false, true));
0 голосов
/ 27 августа 2008

Состояние просмотра сохраняется только для нескольких запросов на одну и ту же страницу . При изменении строки запроса в URL запрашивается новая страница, поэтому очищается состояние просмотра.

Можно ли удалить зависимость от состояния представления, добавив дополнительные параметры строки запроса? Затем вы можете создать новый URL и Response.Redirect к нему.

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

Form.Action = Request.Path;
0 голосов
/ 26 августа 2008

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

0 голосов
/ 26 августа 2008

Вы пытались изменить Request.QueryString [] для SelectedIndexChanged для DropDown? Это должно сработать.

0 голосов
/ 26 августа 2008

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

...