Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net webforms中正确实现PRG模式_C#_.net_Asp.net_Webforms_Post Redirect Get - Fatal编程技术网

C# 如何在asp.net webforms中正确实现PRG模式

C# 如何在asp.net webforms中正确实现PRG模式,c#,.net,asp.net,webforms,post-redirect-get,C#,.net,Asp.net,Webforms,Post Redirect Get,我有一个简单的三页asp.net webforms网站,在返回step3.aspx时,返回浏览器按钮会弹出“Firefox必须发送任何信息以重复任何操作…”的问题 流程是:用户登陆step1.aspx,会话开始,用户在产品上报价并被重定向到step2.aspx。在step2.aspx上,通过单击asp:按钮确认购买。OnClick事件处理程序btnpourchase\u Click处理购买逻辑,并将Response.Redirect(“step3.aspx”)重定向到step3.aspx。Ste

我有一个简单的三页asp.net webforms网站,在返回step3.aspx时,返回浏览器按钮会弹出“Firefox必须发送任何信息以重复任何操作…”的问题

流程是:用户登陆step1.aspx,会话开始,用户在产品上报价并被重定向到step2.aspx。在step2.aspx上,通过单击asp:按钮确认购买。OnClick事件处理程序btnpourchase\u Click处理购买逻辑,并将Response.Redirect(“step3.aspx”)重定向到step3.aspx。Step3.aspx仅显示确认页面(收据详细信息)。会话将在步骤3中被销毁,当用户点击“后退浏览器”按钮时,系统会提示他们重新提交post弹出窗口。理想情况下,我希望用户在回击时点击step1,而无需重新提交提示。每个页面都设置为无缓存,如果会话无效,则重定向到步骤1

有人对更好的流程有什么建议吗


该站点最终将迁移到asp.net mvc/ajax,这很可能使PRG工作流更易于实现,但目前正在寻找一种相对简单的方法。

我尝试一下这个问题。你提到的流量会妨碍页面的正常功能,当然你已经想到了这一点。不过,我想说,这可能是危险的(与您期望的功能相反)和适得其反的。根据我从你的问题中看到的情况,我将最终删除第2页和第3页,并将所有逻辑保留在同一个页面中

我也很高兴听到你试图避免什么,用这个?是双柱的吗?就像购物车中的内容的双重发布?部分/未完成数据输入插入?使用所描述的影响后退按钮的方法,您可能会遇到一个问题,但会遇到另一个问题。一大系列的浏览器可以在这样的工作环境中采取完全不同的行动

我看到两个好的选择

用户控件,
创建三个用户控件,每个控件都有特定于页面的逻辑。您可以通过编程方式将它们加载到页面中。即在
bn按钮上单击事件。用户控件通过加载控件(“PathToAscxFileOnDisk.ascx”)
加载

面板,
我也会考虑三个
,或者更好的
,来将所有的逻辑放在其中

在这种情况下,您完全没有回发问题,可以专注于将功能移动到业务逻辑中,并使用代码文件控制显示/隐藏时的流,以及填充面板/用户控件中的控件。您可能还可以控制回发/单击URL并按enter键

您提到了Ajax,
Ajax绝对可以使页面无状态(这意味着您可以在没有缓存、会话、viewstate等的情况下工作。不过,问题在于用户可能在页面之间导航。我认为即使是Ajax也没有什么帮助,而您保留了三页解决方案


我个人认为,将aspx文件移动到每个aspx中并创建一个aspx作为主容器是一项简单的任务。使用该选项,您甚至可以避免重复命名(比如将代码复制/粘贴到面板中)页面加载流/逻辑的问题。

一个简单的解决方案是永远不允许页面在回发时呈现,而是接受/存储它发布的任何信息,然后重定向到下一个页面(或自身)


这样,如果用户点击后退按钮,它将返回GET,而不是POST,并避免弹出窗口。

如果我理解正确,您还没有使用PRG

在第2步,临时存储信息并重定向以显示它。如何执行此操作在很大程度上取决于您的应用程序:会话、数据库、cookie等都是具有不同特征的选项

然后重定向以显示该信息

步骤3也是如此

如果您回击步骤3,您将转到步骤2。但是,如果您返回GET请求,则不会出现警告。正如您所说,您的应用程序将销毁步骤3上的会话数据,因此根据您所说的,用户将转到步骤3


也许我遗漏了你所说的内容。

谢谢你的输入。我不怕双重发布,因为我已经确认在第3页上按back,在resubmit post弹出窗口中按OK确实会将你带回到第1页(至少对于FF)。我只是不想显示此重新提交弹出窗口。您提出的有趣的解决方案,我可能很快会对此进行研究。我可以重新处理流程来完成此操作,只是使其必须存储服务器端验证错误等。因此重定向到自身将显示该信息。我正在考虑采用MVC路线,在tempda中存储验证错误ta或其他。此应用程序已经是一个混合应用程序,登录页是MVC,所以我可能会完成迁移。谢谢。谢谢,你是对的。这很像Will的答案,但有更多细节。我已经尝试过,以便步骤2始终重定向。我只需要存储信息,以便在重定向时正确显示。我有一个“获取我的个人资料"步骤2上的按钮以及验证错误。我使用PRG,但不是在所有正确的位置,因此,返回按钮重新发布提示,但现在我知道您始终需要重定向,而不是任何回发。我已经奖励了威尔,因为这是我将要走的路线。我碰巧在回发上呈现了一个页面,因此我需要存储信息和redi谢谢你的回答。