Response.Redirect та же страница RadioButtonList SelectedItem - PullRequest
0 голосов
/ 20 октября 2011

Я пытаюсь сделать фильтр заданий для списка заданий на нашем сайте.Фильтр для типа задания обернут в UpdatePanel, и кнопка для применения фильтров перенаправляет обратно на ту же страницу.

Это потому, что я буду использовать umbraco.library: RequestQueryString в XSLT для заполнениясписок заданий.

Однако значение фильтра строки запроса, по-видимому, не выбирает RadioButtonList.Например:

Страница загружается, но ничего не происходит, потому что vt имеет значение null:

protected void Page_Load(object sender, EventArgs e)
    {
        string vt = Request.QueryString["vt"];

        if (vt != null)
        {
            foreach (ListItem li in rblVacancyType.Items)
            {
                if (li.Value == vt)
                {
                    li.Selected = true;
                }
            }
        }
    }


    <asp:UpdatePanel ID="upSearchFilters" runat="server">
                <ContentTemplate>
                    <p>
                        <asp:RadioButtonList ID="rblVacancyType" runat="server">
                            <asp:ListItem Text="All" Value="all"></asp:ListItem>
                            <asp:ListItem Text="Permanent" Value="permanent"></asp:ListItem>
                            <asp:ListItem Text="Temporary" Value="temporary"></asp:ListItem>
                        </asp:RadioButtonList>
                    </p>
</ContentTemplate>
</asp:UpdatePanel>

Вот кнопка:

<asp:ImageButton ID="ibFilters" ImageUrl="~/images/buttons/filter-button.png" OnClick="ibApplyFilters_Click" runat="server" />

Вот процедура:

protected void ibApplyFilters_Click(object sender, EventArgs e)
    {
        Response.Redirect("/careers/join-us/?filters=true&vt=" + rblVacancyType.SelectedValue.ToString());  
    }

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

Есть идеи?

Ответы [ 3 ]

1 голос
/ 20 октября 2011

Основываясь на поведении (работает в первый раз), я считаю, что это описывает происходящее:

  • MyPage.aspx (исходная загрузка)
  • Элементы управления страницы инициализированы по умолчанию
  • Загрузка страницы - строка запроса не указана, переключатель не выбран

(пользователь нажимает кнопку - вызывает обратную передачу)

  • MyPage.aspx (обратная передача)
  • Элементы управления страницей инициализированы по умолчанию
  • Переключатель кнопок установлен из ViewState
  • Загрузка страницы - строка запроса не выбрана, переключатель не выбран
  • ButtonClick - использует переключательпараметр, перенаправляет ли ответ

  • MyPage.aspx? VT = Постоянный (загрузка из перенаправления)

  • Элементы управления страницы инициализированы по умолчанию
  • СтраницаЗагрузка - строка запроса установлена, переключатель выбран

(пользователь нажимает кнопку - вызывает обратную передачу)

  • MyPage.aspx? VT = Постоянная (обратная передача)
  • Элементы управления страницей инициализированы по умолчанию
  • Радиокнопка, установленная из ViewState
  • Page Load - Строка запроса установлена, переключатель установлен в постоянный режим (здесь проблема)
  • ButtonClick - использует параметр переключателя, перенаправляет ответ

Я считаю,простой (если! IsPostback) исправит ситуацию

0 голосов
/ 20 октября 2011

Из-за странной природы кода + постбэков логика в ответе Марка кажется довольно точной, но предложенное исправление не сработало, поскольку я пытался это как возможное решение. Ниже приведена модификация, но, насколько я мог видеть, она работает. Попробуйте, это может сработать для вас.

<form id="form1" runat="server">
    <div>

         <asp:ScriptManager ID="ScriptManager1" runat="server">
         </asp:ScriptManager>

         <asp:UpdatePanel ID="upSearchFilters" runat="server">
                <ContentTemplate>
                    <p>
                        <asp:RadioButtonList ID="rblVacancyType" runat="server"  
                            AutoPostBack="True">
                            <asp:ListItem Text="All" Value="all"></asp:ListItem>
                            <asp:ListItem Text="Permanent" Value="permanent"></asp:ListItem>
                            <asp:ListItem Text="Temporary" Value="temporary"></asp:ListItem>
                        </asp:RadioButtonList>

                    </p>
                    <p>
                        <asp:ImageButton ID="ibFilters" runat="server" CausesValidation="False" 
                            Height="30px" OnClick="ibApplyFilters_Click" />
                    </p>
                </ContentTemplate>
         </asp:UpdatePanel>

    </div>

</form>

Код сзади:

protected void Page_Load(object sender, EventArgs e)
{
   ibFilters.PostBackUrl = "~/WebForm1.aspx?filters=true&vt=" + rblVacancyType.Text;
   string vt = Request.QueryString["vt"];    
}

Важно:

Как это настроено, он сохранит ваш выбор, обновит параметры фильтра в URL при нажатии кнопки, а затем назначит vt правильное значение, которое будет использоваться при фильтрации чего-либо еще на вашей странице.

Вы также должны изменить мой "~ / WebForm1.aspx? Filters = true & vt =" для своего URL.

0 голосов
/ 20 октября 2011

Похоже, что значения обратной передачи повторно применяются.См. Эту статью о жизненном цикле страницы ASP.NET: http://msdn.microsoft.com/en-us/library/ms178472.aspx.

Значения для элементов управления повторно применяются посредством обратной передачи после загрузки страницы.

...