当使用回发然后浏览器后退按钮时,先前的内容显示正确,但触发回发的参数具有最新值 - 它不会返回到它触发回发之前的值。这会创建一个无效状态。
在示例中,下拉列表将AutoPostBack设置为true。
输入" a2"并将下拉值更改为" text2":
输入" a3"并将下拉值更改为" text3":
以编程方式转换浏览器缓存并没有帮助,因为它提供了"文档已过期"在浏览器上返回操作。
返回后,我希望参数匹配使用这些参数生成的内容,特别是AutoPostBack。是否有理想的方式来获得这种行为?
代码:
的aspx
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
<asp:ListItem Text="text1" />
<asp:ListItem Text="text2" />
<asp:ListItem Text="text3" />
</asp:DropDownList>
<div>Server content - <asp:Label ID="ServerContent" runat="server" /> </div>
aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
ServerContent.Text = string.Format(
"received values: {0}, {1}", TextBox1.Text, DropDownList1.SelectedValue);
}
答案 0 :(得分:0)
目前还不是很清楚你要做什么。 DropDownList更改,服务器执行表单发布,您得到响应,然后您希望在之前的状态(表单发布之前)响应?看起来像一个奇怪的要求。如果用户因为犯了错误而返回,则更改该值,然后再次进行PostBack。没有伤害。
但是如果你真的想要将值设置为默认值,则需要在页面未完成PostBack时使用JavaScript设置DropDownList的值。看看下面的我的代码片段,它会给出所需的结果。它在加载页面时将SelectedIndex
设置为2,但在执行PostBack时则不会,因此新值仍然可见。现在,当用户返回时,脚本仍然存在,并将DropDownList再次设置为默认值。
<asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="aaa" Value="aaa"></asp:ListItem>
<asp:ListItem Text="bbb" Value="bbb"></asp:ListItem>
<asp:ListItem Text="ccc" Value="ccc"></asp:ListItem>
</asp:DropDownList>
背后的代码
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "setValue", "document.getElementById('" + DropDownList1.ClientID + "').selectedIndex = 2;", true);
}
}
答案 1 :(得分:0)
我必须在其他隐藏字段中保留某些字段的值,并在客户端上使用它们。使用&#34;解决方案&#34;:
的相同示例ASPX
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
<asp:ListItem Text="text1" />
<asp:ListItem Text="text2" />
<asp:ListItem Text="text3" />
</asp:DropDownList>
<asp:HiddenField runat="server" ID="DropDownList1ValueCarrier" ClientIDMode="Static" />
<div>Server content - <asp:Label ID="ServerContent" runat="server" /> </div>
aspx.cs
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
DropDownList1ValueCarrier.Value = DropDownList1.Text;
}
JS
$('#DropDownList1').val($('#DropDownList1ValueCarrier').val());