我正在使用新的路由功能编写一个 asp.net 4.5 应用程序。我有一个页面显示有关项目的一些信息。如果Page_Load
我检查了路线数据(项目 ID)和用户权限,如果有什么不对劲的地方(例如,该 ID 用于已删除的项目),我会使用Response.RedirectToRoute
它们将其打包,直接返回主页。不要通过 GO,不要收取 200 美元。
直到我尝试访问已删除的项目并且我得到一个错误页面而不是主页,这才完全有意义。我做了一些挖掘,发现即使在我使用之后RedirectToRoute
(与标准Redirect
方法不同),其余的页面代码也会继续执行,这至少看起来很浪费(因为我只是要扔掉结果)并抛出错误当必要的数据不存在时。
我做了更多的 SO 挖掘,发现了令人难以置信的邪恶Response.End()
。它可以满足我的需要,但即使是 MSDN页面也告诉我这Response.End
是一种古老的被诅咒语言的私生子,不适合看到光明。主要的反对意见似乎是 Response.End 抛出异常,这对性能不利。我不是最有经验的开发人员,所以我不完全理解这个问题,但我很难相信抛出异常比加载整个网页更昂贵。对于如此简单的任务,变通方法似乎相当复杂和过度,特别是因为大多数页面都需要某种有效性检查。
在这种情况下我该怎么办?为我的无礼而使用Response.End
并乞求宽恕?拼凑一些丑陋的解决方法?还是我对这个问题的看法一开始就错了?我真的很想知道。
更新:现在我已经考虑了更多,我想知道我是否对这个问题有错误的看法。也许立即重定向并不是用户体验的最佳响应。将所有控件包装在面板中并使用类似的东西会更好吗?
Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
'Validation Code
If notValid Then
ControlsPanel.Visible = false
ErrorPanel.Visible = true
End If
End Sub