2010-07-15 2 views
2

Я новичок в ASP.net, и я пытаюсь сохранить состояние некоторых текстовых полей при перенаправлении. У меня есть интерфейс панели управления с разверткой. На главной странице панели мониторинга есть опция диапазона дат (текстовое поле как для даты начала, так и для даты окончания) для отображаемой информации, и мне нужно сохранить диапазон дат, выбранный пользователем. Я знаю, что могу помещать информацию в переменную сеанса для использования на странице, на которую я перенаправляюсь, но когда я нажимаю кнопку «вернуться» на странице детализации, она возвращается на главную страницу панели мониторинга и теряется значение текстового поля , Я также попытался сохранить viewstate, но не мог заставить это работать. Каков наилучший подход к решению этой проблемы?asp.net save textbox on redirect

Редактировать: В случае, если это имеет значение, я фактически использую jQuery $(location).attr('href', url); для выполнения перенаправления, потому что некоторые объекты диаграммы используют html или asp гиперссылки в IE.

+0

Можете ли вы прочитать сеанс на странице Page_Load на начальной странице, если это перенаправление с другой страницы? Я считаю, что это страница панели инструментов. Всякий раз, когда он загружается, проверьте сеанс для ранее введенных значений текстового поля. – DOK

ответ

1

Вы на правильном пути.

На вашей странице переадресации вы проверяете переменную сеанса, правильно?

Почему бы не проверить его на своей оригинальной странице тоже?

т.е .: Исходная страница OnLoad:

IF NOT String.isnullorempty(Session("date")) THEN 
    me.start_date.selectedvalue = Session("date") 
END IF 
+0

Редактировать: данные сеанса сохраняются через перенаправление. Например, если я задал var = Session ["txtEndDate"], он работает нормально. Однако, когда я пытаюсь txtEndDate.Text = Session ["txtEndDate"] или txtEndDate = Session ["txtEndDate"] или txtEndDate.Text = (строка) Session ["txtEndDate"] Я получаю сообщение об ошибке. Поэтому мой вопрос заключается в том, как восстановить дату из переменной сеанса. –

+0

Если вы пытаетесь заполнить текстовое поле, тогда это должно работать: me.txtEndDate.text = Session ("txtEndDate") Это действительно основной ответ, хотя - что говорит об ошибке? – dave

+0

Я решил это с помощью Session ["txtEndDate"] = txtEndDate.Text, txtEndDate.Text = (string) Session ["txtEndDate"] –

0

Так прояснить ваш вопрос: вы должны сохраняться выбранные значения Дата для текстовых полей, когда пользователь переходит обратно на страницу.

Причина, по которой ViewState не работает, заключается в том, что вы перешли от страницы. ViewState переносится или «запоминается», вставляя его в качестве базовых 64 кодированных данных на странице, поэтому, как только вы покидаете страницу, она исчезает навсегда.

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

Если вы собираетесь использовать сессию для связи значений между страницами, то я хотел бы предложить вам использовать статические константы в качестве ключа к каждой части информации, что-то вроде этого:

public class MySessionKeys 
{ 
    public static string DateStarted = Guid.NewGuid().ToString(); 

    public static string DateFinished = Guid.NewGuid().ToString(); 
} 

и на странице ASPX:

protected void Page_Loaded(object sender, EventArgs e) 
{ 
    Session[MySessionKeys.DateStarted] = myDateStartedTextBox.Text; 
} 
+0

Спасибо за ввод. Это похоже на отличное решение. У меня есть переменная сеанса, которая делает это через перенаправления. Как восстановить значение в текстовом поле? –