Сведения о вопросе

1234123213

21:55, 22nd August, 2020

Теги

Postback с измененной строкой запроса из выпадающего списка в ASP.NET

Просмотров: 487   Ответов: 6

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

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

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

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

Edit: и мне также нужно сохранить ViewState.

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

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

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



  Сведения об ответе

ITSME

21:46, 14th August, 2020

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

EDIT: вот некоторые быстрые и грязные коды, которые указывают на то, что будет делать трюк:

<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 почему в данном случае вам нужно его сохранить? скажите на милость?


  Сведения об ответе

piter

07:20, 19th August, 2020

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


  Сведения об ответе

davran

08:26, 18th August, 2020

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

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

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

Form.Action = Request.Path;


  Сведения об ответе

piter

09:26, 4th August, 2020

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


  Сведения об ответе

PROGA

14:59, 10th August, 2020

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


  Сведения об ответе

screen

02:08, 28th August, 2020

Вы можете использовать следующую функцию для изменения строки запроса при обратной передаче в 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));


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться