响应.重定向相同的页面单选按钮列表选中的项目
本文关键字:列表 项目 单选按钮 重定向 响应 | 更新日期: 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。