后,我已经得到了部分由使用DropDownList
控制导航的ASP.NET 2.0 Web应用程序。当其中一个更改时,会导致回发,然后根据在下拉列表中选择的内容将其重定向到另一个URL。使用回传浏览器的后退按钮
我使用的下拉菜单后,使用浏览器的后退按钮时发现奇怪的行为。程序是这样的:
- 在下拉列表中选择一个,导致回发和重定向。目前很好。
- 点击浏览器的后退按钮。
- 在另一个导航下拉菜单下面使用之前使用的一个(它们都包含在一个
div
),请做出选择。该页面首次重定向到相同的URL,而不是基于此其他下拉菜单重定向到的内容。
我已经在Firefox 10和IE9中试过这个,看过同样的东西。我查看了Firebug中的Net选项卡,并在步骤3的POST中看到引用了正确的控件。但是,当我调试它时,错误下拉的事件处理程序(步骤1中使用的那个)会触发。
的代码非常简单明了。标记的例子:
<asp:DropDownList runat="server" ID="ddlTest" AutoPostBack="true" />
的下拉列表实际上是不是纯<asp:DropDownList ... />
元件;我使用类似于this的方法插入optgroup
元素。 C#的
例子:
ddlTest.Click += new EventHandler(ddlTest_SelectedIndexChanged);
而且在ddlTest_SelectedIndexChanged
:
if (ddlTest.SelectedValue != "")
{
Response.Redirect(MyUtilClass.GetUrl(ddlTest.SelectedValue));
}
这是怎么回事吗?
更新2012年2月6日:我已经通过检查的Request["__EVENTTARGET"]
我SelectedIndexChanged
事件处理程序的内容固定这一点。不过,我仍然很好奇它为什么会发生。为什么重复第一个事件?为什么只有当第二次回复发生在第一次回复发生时才会发生?
你可以添加下拉页面的标签吗?有助于。 – 2012-02-04 00:11:19
下拉列表的标签?你的意思是他们在页面上的ID?或者他们的标记?它看起来很像我在问题中发布的标记。 – 2012-02-04 00:20:34
只是一个建议:即使没有使用后退按钮,您的导航栏也不会显示我所称的预期行为。通常,导航应该与您的内容同步。这样,当你点击一个学校名称时,那个学校就会在你的下拉菜单中被选中。事实上,我越看越感觉* * *。就好像你可以摆脱整个左侧导航(捕获房地产),并在顶部提供两个下降:学校和运动。无论如何,其他人完全依赖于该信息... $ 0.02为其价值。 – NotMe 2012-02-05 04:50:43