2012-10-03 51 views
1

我有一个ASP.NET Web窗体(C#),用户填写,它有一对夫妇的下拉,导致后背上,一些导致回发确认名单。我也使用了几个不同的更新面板。一个面板对用户输入可见,另一个面板在用户单击提交并将数据添加到数据库后出现。确认面板(最后一个面板)也向用户显示确认编号。ASP.NET Web窗体和F5刷新问题

最后一个面板显示器之后,我想阻止该网页重新加载当用户按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。

这里是程序的流程: 用户打开的形式,在contactpanel领域填充和点击提交。这些字段使用ASP.NET服务器验证控件进行验证,如果一切正常,则将数据发送到数据库并返回确认编号。最后,将contactpanel设置为visibility = false,并将confirmationpanel设置为visibility = true。

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

感谢,

+0

我99%肯定,使用更新面板需要Javascript ......如果它工作围绕它通过刷新整个页面,那么你真的最好重新设计你的网站是如何工作的,如果必须工作,而JavaScript的 – Earlz

+1

我认为禁用JavaScript的人可以忍受偶然按下F5的问题,这种情况经常不会发生......您试图通过服务器端解决方案来解决客户端问题,通常以难以维护的代码。 – Vache

+0

使用Javascript。根据您的目标受众,您可能需要执行Javascript检测,并向没有它的访问者发出警告。如果这是2005年,我会说是的,你的担心是有效的,但没有。人们需要Javascript;对每个人都好。但是,说实话,我不明白Javascript是如何帮助你解决问题的。如果人们刷新页面,除非你想出另一个解决方案,否则它仍然会重置它。 –

回答

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 /度量团队跟踪转换(即使有很多其他方式)。

+0

+1这被称为Post/Redirect/Get,对于任何在线任何事务来说都是至关重要的。 –

+0

我决定用你的方式去使用Post/Redirect/Get。它解决了这个问题,比我想象的要容易实现。谢谢!最困难的是确定是否需要使用Server.Response或Response.Redirect。在我发生了一些初始错误之后,例如列出整个URL而不仅仅是页面,这个过程就起作用了,问题解决了。哦,我用了Respone.Redirect。 –

+0

不错的选择。你应该几乎总是使用Response.Redirect。在我看来,Server.Transfer应该从未见过白天。它的用途几乎是不实用的,人们常常会感到困惑,并试图以错误的理由使用它。 –