1

我有一个用户填写的 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 服务器验证控件进行验证,如果一切正常,则将数据发送到数据库并返回确认号。最后,联系人面板设置为可见性=false,确认面板设置为可见性=true。

希望这可以帮助。感谢任何建议。

谢谢,

4

1 回答 1

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 团队更容易跟踪转换(即使有很多其他方法)。

于 2012-10-03T01:36:19.950 回答