我正在尝试对我们网站上的工作列表进行工作过滤。作业类型的过滤器包含在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());
}
然而,当页面第一次重定向时,没有选择任何内容,我点击永久,永久被选中。如果我然后选择“全部”或“临时”,则选择不会改变。
有什么想法吗?
答案 0 :(得分:1)
根据行为(它第一次运作)我相信这描述了正在发生的事情:
(用户点击按钮 - 导致回发)
ButtonClick - 使用单选按钮设置,响应重定向
MyPage.aspx?VT =永久(从重定向加载)
(用户点击按钮 - 导致回发)
我相信一个简单的(if!IsPostback)会解决问题
答案 1 :(得分:0)
听起来像是重新应用了回发值。请参阅有关ASP.NET页面生命周期的这篇文章:http://msdn.microsoft.com/en-us/library/ms178472.aspx。
在page_load之后,通过回发重新应用控件的值。
答案 2 :(得分: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"];
}
重要:强>
设置方式,它将保持您的选择,在按钮按下时更新网址中的过滤器参数,然后为vt分配正确的值,用于过滤页面上的任何其他内容。
你必须为你的网址更改我的“〜/ WebForm1.aspx?filters = true&amp; vt =”。