关于你的问题的细节,如何反转它?可能仅在不满足条件时才添加 Load 事件侦听器(例如,在页面 Init 中)。
另一种选择可能是做类似的事情:
this.Load -= MyPageLoadMethod;
您可能正在查看事件本身,而不是 OnLoad 方法。不管怎样,我认为这是可能的,在这里查看一些选项如何从控件中删除所有事件处理程序
虽然有一个很大的“但是”......
像这里的大多数人一样,我认为你没有解决正确的问题。很抱歉,我认为这同样适用于 Emad 的解决方案。
蒂姆做到了。这个答案将尝试更多地解释这个选项。
Post-Get-redirect 模式非常流行且非常标准。在我们的大多数应用程序中,通过在页面加载之前重新单击提交按钮或刷新浏览器导致另一个 POST 调用多次提交相同的表单是错误的,因此,在非 AJAX 表单提交后重定向的做法已成为这么标准。
您可能尝试的所有其他方法都将不再是一种肮脏的解决方法,而是一种适当的解决方案。
--
现在,出现了向用户提供反馈的问题。Ruby On Rails 为此提供了一个漂亮的助手,称为 Flash 助手。这是您可以在重定向之前设置的消息(如果没有重定向,甚至可以在同一页面中设置),下次显示它时,它会自行销毁,下次调用它时,您什么也得不到。所以,你什么都不显示。
ASP.NET MVC 有这样的东西,即 TempData。TempData 可以存储在很多地方,默认情况下在 Session 中,因此,如果您从 MVC 操作重定向,您可以设置类似TempData['Message']
,并在下一个 Controller 中读取它。ASP.NET MVC 将在重定向后处理删除它。
那么,Webforms 怎么样?也没有什么可以阻止你这样做。这真的不是火箭科学
您可以检查 URL Referrer 是否为编辑页面,并据此显示消息。
您可以在重定向之前将消息存储在 Session 中,并在每次页面加载时检查它,如果找到,则将其显示并从 Session 中删除
如果会话被禁用,您可以使用 cookie。您可以在发送之前检查 cookie 的日期,这样如果重定向从未发生(使用网络丢失或其他),并且在他没有看到过时消息时使用稍后到达页面。
您也可以存储在缓存中(当然还有一些与用户相关的密钥,因为缓存是应用程序范围的),然后您可以将缓存过期设置为某个较短的时间段以避免在 cookie 选项中解释的问题
您还可以在 Google 上搜索 Rails Flash-like for ASP.NET Webforms,看看其他人想出了哪些可重用组件。例如,这个结果出现在我的搜索中:http:
//highoncoding.com/Articles/542_Creating_Rails_Like_Flash_Feature_in__NET_The_Flash_Control.aspx
检查 NuGet 也可能有一些东西。同样,无论如何构建自己的并不难。
更新:
另一种简单的方法可能是只重定向到相同的 URL,这将导致 GET 请求并且不会运行任何处理程序,非常接近 Post-Get-Redirect 的原始实现(您的可能是 Post-Post-Redirect,开玩笑),也很安全。
就像是:
Response.Redirect(Request.RawUrl);
更新 2
就像上面提到的,如果你在页面初始化之后运行,比如在页面加载中,你总是可以以类似于以下的方式删除事件:
this.SubmitButton.Click -= SubmitButton_Click;
你明白了……
如果您想要停止特定事件,这很有用,而前面的答案假设您正在尝试停止大多数事件。
http://gurustop.net