Запоминание состояния DropDownList при перенаправлении - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть DropDownList, в котором есть несколько вариантов на выбор.Теперь, когда пользователь выбирает одну из опций, он должен нажать на кнопку, которая является перенаправлением на той же странице:

protected void Button4_Click(object sender, EventArgs e)
{
    Response.Redirect("Graphs.aspx?Selection=" + DropDownList1.SelectedValue + "&Date1=" + TextBox1.Text + "&Date2=" + TextBox2.Text);
}

Я должен использовать перенаправление вместо обратной передачи, потому что я использую flot, которыйЭто библиотека JavaScript, и весь код должен быть написан снова, когда пользователь выбирает какую-то другую опцию.Проблема в том, что когда он перенаправляет назад, по какой-то причине я не могу вспомнить значение в DropDownList, которое ранее выбрал пользователь.Я пробовал это с этим кодом:

protected void Page_Load(object sender, EventArgs e)
{
    if (Request.QueryString["Selection"] == "TemperatureOUT")
    {
        DropDownList1.SelectedIndex = 0;
    }
    else if (Request.QueryString["Selection"] == "Dewpoint")
    {
        DropDownList1.SelectedIndex = 1;
    }
}

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

Graphs.aspx?Selection=Dewpoint&...

но вместо этого он говорит:

 Graphs.aspx?Selection=TemperatureOUT&...

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

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

Может быть, это тот, который вы просите

DropDownList oldvalue = (DropDownList)PreviousPage.FindControl("DropDownList1");

Попробуйте написать так

  protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList ddl = (DropDownList)Page.PreviousPage.FindControl("Your first page drop down id here");
        if (ddl!=null)
        {
          if(ddl.SelectedValue == "2")
            // do your coding here
        }
    }
}
0 голосов
/ 16 февраля 2011

Первое, что я хотел бы проверить, это то, что вы используете IsPostBack, чтобы определить, какие элементы добавить в свой список:

if (!IsPostBack)
{
    DropDownList1.Items.Add(...)
}

Если вы вносите изменения в список без надежного определения, должен ли он бытьОперация GET или POST, элементы списка получат отскок (при условии, что вы добавляете их в код, а не в разметку).Когда страница загружается через POST, она восстанавливает состояние элементов управления (в данном случае это элементы, добавленные), а затем применяет любые изменения (например, выбранный элемент и т. Д.) Перед обработкой события загрузки.

Когда вы делаете перенаправление, вы отправляете новый запрос GET для цели перенаправления, который будет отображать страницу без обработки выбора.С комбинацией IsPostBack и обработкой строки запроса в запросе GET этого должно быть достаточно для решения вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...