0

私たちのウェブサイトの求人リストに求人フィルターを付けようとしています。ジョブ タイプのフィルターは UpdatePanel にラップされ、フィルターを適用するボタンは同じページにリダイレクトされます。

これは、XSLT で umbraco.library:RequestQueryString を使用してジョブ リストを設定するためです。

ただし、クエリ文字列フィルター値は 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());  
    }

しかし、ページが初めてリダイレクトされるとき、何も選択されていないので、永久をクリックすると、永久に選択されます。次に「すべて」または「一時」を選択しても、選択は変更されません。

何か案は?

4

3 に答える 3

1

動作に基づいて(初めて動作します)、これは何が起こっているかを説明していると思います:

  • MyPage.aspx(元のロード)
  • デフォルトに初期化されたページコントロール
  • ページの読み込み-クエリ文字列なし、ラジオボタンが選択されていない

(ユーザーがボタンをクリックすると、ポストバックが発生します)

  • MyPage.aspx(ポストバック)
  • デフォルトに初期化されたページコントロール
  • ViewStateから設定されたラジオボタン
  • ページの読み込み-クエリ文字列なし、ラジオボタンが選択されていない
  • ButtonClick-ラジオボタン設定を使用し、応答リダイレクトを行います

  • MyPage.aspx?VT =永続的(リダイレクトからロード)

  • デフォルトに初期化されたページコントロール
  • ページの読み込み-クエリ文字列セット、ラジオボタンが選択されています

(ユーザーがボタンをクリックすると、ポストバックが発生します)

  • MyPage.aspx?VT =永久(ポストバック)
  • デフォルトに初期化されたページコントロール
  • ViewStateから設定されたラジオボタン
  • ページの読み込み-クエリ文字列が設定され、ラジオボタンが永続的に設定されています(これが問題です)
  • ButtonClick-ラジオボタン設定を使用し、応答リダイレクトを行います

単純な(!IsPostbackの場合)で問題が解決すると思います

于 2011-10-20T18:36:35.413 に答える
0

コードとポストバックの奇妙な性質のため、Markの回答のロジックは非常に正確であるように見えますが、可能な解決策としてそれを試したため、提案された修正は機能しませんでした。以下は変更ですが、私が見る限り、それは機能します。それを試してみてください、それはあなたのためにうまくいくかもしれません。

<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に割り当てます。

URLの「〜/ WebForm1.aspx?filters = true&vt=」も変更する必要があります。

于 2011-10-20T19:05:17.070 に答える
0

ポストバック値が再適用されているようです。ASP.NET ページのライフサイクルに関するこの記事を参照してください: http://msdn.microsoft.com/en-us/library/ms178472.aspx

コントロールの値は、page_load の後にポストバックを介して再適用されます。

于 2011-10-20T17:09:41.533 に答える