即使浏览器刷新,如何在网页中保留数据

时间:2013-11-17 11:25:16

标签: c# asp.net .net

我有一个页面,它从用户那里收集名字,名字,城市,州。

名字,第二名 - >这些是文本框。 城市,州 - >下拉列表。

当用户输入姓名并选择城市和州时,如果用户按下刷新按钮,则输入的任何数据和所选的详细信息都将消失。即使浏览器刷新,如何保留这些数据。

谢谢, Pacchi

4 个答案:

答案 0 :(得分:2)

除非您输入内容(使用AJAX将其发布回服务器)或将其存储在本地存储中,或者将其存储在诸如模糊等事件的cookie中,否则刷新请求将无法发回领域。

您必须编写一些客户端代码来保存它们并在页面加载时再次填充它们但是应该考虑如果将它们存储在本地计算机上然后它们会成为潜在的“回放”安全风险,其中下一个使用网页的人可以访问先前的人员数据。您还需要考虑用户如何清除数据并重新开始。

我想补充一点,如果用户故意按下F5,那么他们真的想要从初始状态重新加载页面并重新开始。如果您使用F5作为让它们刷新的方式,因为页面的一部分需要更新,那么考虑在相关页面上提供按钮或链接可能会更好,并允许用户点击它然后在您之前进行AJAX调用以刷新页面的那一部分而不是整个页面。

答案 1 :(得分:0)

如果您正在使用MVC,那么您可以使用它。否则你必须使用javascript。

答案 2 :(得分:0)

您可以在UpdatePanel中使用Timer,以便在Timer1的每个刻度中都可以将数据从输入保存到Session。

例如,在以下标记中:

<div class="row">
    <label>First Name:</label> 
    <asp:TextBox ID="FirstNameTextBox" runat="server"></asp:TextBox>
</div>
<div class="row">
    <label>Last Name:<label> 
    <asp:TextBox ID="LastNameTextBox" runat="server"></asp:TextBox>
</div>
<div class="row">
    <label>City:</label> 
    <asp:DropDownList ID="CityDropDownList" runat="server"></asp:DropDownList>
</div>
<div class="row">
    <label>State:</label> 
    <asp:DropDownList ID="StateDropDownList" runat="server"></asp:DropDownList>
</div>
<div class="row">
    <asp:Button ID="SubmitButton" runat="server" Text="Button" />
</div>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Timer ID="Timer1" runat="server" Enabled="true" Interval="5000" OnTick="Timer1_Tick"></asp:Timer>
        </ContentTemplate>
    </asp:UpdatePanel>

这背后的代码是:

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["FirstName"] != null) FirstNameTextBox.Text = Session["FirstName"].ToString();
    if (Session["LastName"] != null) LastNameTextBox.Text = Session["LastName"].ToString();
    if (Session["City"] != null) CityDropDownList.SelectedValue = Session["City"].ToString();
    if (Session["State"] != null) StateDropDownList.SelectedValue = Session["State"].ToString();
}

protected void Timer1_Tick(object sender, EventArgs e)
{
    Session["FirstName"] = FirstNameTextBox.Text;
    Session["LastName"] = LastNameTextBox.Text;
    Session["City"] = CityDropDownList.SelectedValue;
    Session["State"] = StateDropDownList.SelectedValue;
}

每次Timer1滴答时,您都可以将表单字段中的数据保存到Session和Page_Load(...),如果Session中有任何数据,您可以自动填充它们。

确保在用户实际提交表单时清除会话中的数据。

答案 3 :(得分:-1)

JavaScript的:

1)localStorage(仅限HTMl5浏览器) - 您可以将其保存为页面本地存储容量的属性

2)将其保存在cookie中

3)将变量附加到URL哈希,以便在刷新后通过location.hash检索它

会话:

1)将其保存为会话变量,并在每次页面加载时通过AJAX检索

2)将它保存在一个cookie中(如果你要将它保存起来,也可以使用JS方法)