响应.重定向相同的页面单选按钮列表选中的项目

本文关键字:列表 项目 单选按钮 重定向 响应 | 更新日期: 2023-09-27 18:12:07

我正试图为我们网站上的工作列表做一个工作过滤器。作业类型的过滤器包装在UpdatePanel中,用于应用过滤器的按钮将重定向回同一页面。

这是因为我将使用umbraco。在XSLT中使用RequestQueryString来填充作业列表。

然而,querystring过滤器值似乎没有选择RadioButtonList。例如:

页面加载,但没有任何反应,因为vt为空:

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());  
    }

然而当页面第一次重定向时,什么都没有被选中,我点击永久,永久被选中。如果我选择"全部"或"临时",所选内容不会改变。

任何想法?

响应.重定向相同的页面单选按钮列表选中的项目

基于行为(它第一次工作),我相信这描述了发生的事情:

  • MyPage。aspx(原始加载)
  • 页面控件初始化为默认值
  • 页面加载-没有查询字符串,没有选中单选按钮

(用户点击按钮-导致回发)

  • MyPage。aspx(发)
  • 页面控件初始化为默认值
  • 单选按钮设置从ViewState
  • 页面加载-没有查询字符串,没有选中单选按钮
  • ButtonClick -使用单选按钮设置,做响应重定向

  • MyPage.aspx吗?VT=Permanent (load from redirect)

  • 页面控件初始化为默认值
  • 页面加载-查询字符串设置,单选按钮选中

(用户点击按钮-导致回发)

  • MyPage.aspx吗?VT=Permanent (postback)
  • 页面控件初始化为默认值
  • 单选按钮设置从ViewState
  • 页面加载-查询字符串设置,单选按钮设置为永久(这是问题)
  • ButtonClick -使用单选按钮设置,做响应重定向

我相信一个简单的(if !IsPostback)将解决问题

听起来像是重新应用了回发值。请参阅这篇关于ASP的文章。. NET页面生命周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx.

控件的值在page_load之后通过回发重新应用

由于代码+回发的奇怪性质,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正确的值用于过滤页面上的任何其他内容。

你必须把我的"~/WebForm1.aspx?filters=true&vt="也改成你的url。