2008-08-25 8 views
2

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

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

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

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

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

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

Возможно, я спрашиваю невозможное или не совсем верно.

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

ответ

0

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

1

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

0

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

3

Вам нужно отключить автозапуск в выпадающем списке - тогда вам нужно подключить код 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 Почему в этом случае вам нужно его сохранить. скажите на милость?

0

Состояние представления длится только multiple requests for the same page. Изменение строки запроса в URL-адресе требует новой страницы, тем самым очищая состояние представления.

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

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

Form.Action = Request.Path; 
0

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

 Смежные вопросы

  • Нет связанных вопросов^_^