ASP.NET Web窗体和F5刷新问题

时间:2012-10-03 00:54:23

标签: asp.net web webforms

我有一个用户填写的ASP.NET Web表单(C#),它有几个导致回发的下拉列表和一些导致回发的验证。我还使用了几个不同的更新面板。一个面板对用户输入可见,另一个面板在用户单击提交后显示,并且数据已添加到数据库中。确认面板(最后一个面板)也会向用户显示确认编号。

在显示最后一个面板后,我想在用户按F5或刷新时阻止页面重新加载。原因是,我不希望用户不小心点击刷新或F5并丢失确认号码和消息。当用户按下F5时,浏览器将其解释为想要加载新页面,此时会话被清除(如下面的代码所示)。

我的第一个想法是重新打印消息和确认号码,并确保持有它的面板保持可见。我将在下面的代码的else部分中执行此操作 - 但由于有多个回发并且它们都触发页面加载,这不起作用,除非有某种程度来确定回发是否是表单的结果元素或f5键。

protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                Session.Clear();
                GetList();
            }
        }
        catch (Exception ex)
        {
            //Do something();
        }
    }

我看过一些推荐使用Javascript的不同帖子,但如果可能的话,我会避免这种情况,因为有人关闭了javascript。

以下是该计划的流程: 用户打开表单,填写联系人面板中的字段并提交点击。使用ASP.NET服务器验证控件验证字段,如果一切正常,则将数据发送到数据库并返回确认号。最后,将contactpanel设置为visibility = false,并将confirmpanel设置为visibility = true。

希望这会有所帮助。感谢任何建议。

谢谢,

1 个答案:

答案 0 :(得分:2)

将最终屏幕上的内容(确认)移动到一个全新的页面。无论保存哪些数据以获得确认,都应该使用某种类型的数据存储(如数据库),然后访问者需要提取的任何ID或变量应该包含在Session var中。这样,当用户刷新页面时,他们仍然会按照您的意愿查看内容。无论如何,这几乎就是我们必须在当天做所有表格的。

例如:

~/form_page.aspx
- User lands
- Fills in information
- Post backs save data as the user progresses
- Save all data collected to a resource such as a database
- Save an ID to access that information to a Session variable
- Redirect user to...

~/form_thankyou.aspx
- On load, get the Session variable needed to pull the information
- Retrieve information from the resource
- Display results to user

(那不是真正的代码,我只是在格式化方面遇到了麻烦。)

使用此技术还可以让您的SEO / Metrics团队更轻松地跟踪转化(即使有很多其他方式)。