【发布时间】:2013-01-05 04:24:47
【问题描述】:
我正在使用新的路由功能编写一个 asp.net 4.5 应用程序。我有一个页面显示有关项目的一些信息。在Page_Load 事件中,我检查路线数据(项目 ID)和用户权限,如果有问题(例如,ID 用于已删除的项目),我使用 Response.RedirectToRoute 将它们打包发送回主页。不要通过 GO,不要收取 200 美元。
这很有意义,直到我尝试访问已删除的项目并且我得到一个错误页面而不是主页。我做了一些挖掘,发现即使在我使用RedirectToRoute(与标准的Redirect方法不同)之后,页面代码的其余部分continues to execute,至少看起来很浪费(因为我只是要扔掉结果)并在必要的数据不存在时引发错误。
我做了更多的 SO 挖掘,发现了令人难以置信的 evil,即 Response.End()。它可以满足我的需要,但即使是 MSDN page 也告诉我 Response.End 是一种古老的被诅咒语言的混蛋,不适合看到光明。主要的反对意见似乎是 Response.End 抛出异常,这对性能不利。我不是最有经验的开发人员,所以我不完全理解这个问题,但我很难相信抛出异常比加载整个网页更昂贵。对于如此简单的任务,workarounds 似乎相当复杂和过度,尤其是因为大多数页面都需要某种有效性检查。
在这种情况下我应该怎么做?使用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
【问题讨论】:
标签: asp.net vb.net webforms user-experience response.redirect