浏览器返回后的AutoPostBack和参数值

时间:2017-01-18 16:07:17

标签: asp.net

当使用回发然后浏览器后退按钮时,先前的内容显示正确,但触发回发的参数具有最新值 - 它不会返回到它触发回发之前的值。这会创建一个无效状态。

在示例中,下拉列表将AutoPostBack设置为true。

输入" a2"并将下拉值更改为" text2":
enter image description here

输入" a3"并将下拉值更改为" text3":
enter image description here


后退:
enter image description here

以编程方式转换浏览器缓存并没有帮助,因为它提供了"文档已过期"在浏览器上返回操作。

返回后,我希望参数匹配使用这些参数生成的内容,特别是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);
}

2 个答案:

答案 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());