asp.net - 在 Response.RedirectToRoute 之后跳过页面执行的正确方法

标签 asp.net vb.net webforms user-experience response.redirect

我正在使用新的路由功能编写一个 asp.net 4.5 应用程序。我有一个页面显示有关项目的一些信息。在 Page_Load事件我检查路线数据(项目 ID)和用户权限,如果有问题(例如 ID 用于删除的项目),我使用 Response.RedirectToRoute送他们包装,回到主页。不要通过GO,不要收集200美元。

这很有意义,直到我尝试访问已删除的项目,而不是主页,我得到了一个错误页面。我做了一些挖掘,发现即使在我使用 RedirectToRoute 之后(与标准 Redirect 方法不同)页面代码的其余部分 continues to execute ,这至少看起来很浪费(因为我只是要扔掉结果)并且当必要的数据不存在时会抛出错误。

我做了更多的 SO 挖掘,发现了令人难以置信的 evilResponse.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

最佳答案

我可能会因为不直接回答问题而陷入困境,但我喜欢看到您关于用户体验的更新。我更喜欢你建议的方法。

我喜欢为无效的 id 给出 410 错误,并使用以下内容对其进行扩展(从 C# 翻译):

Protected Sub ItemDoesNotExist()
'item does not exist, serve up error page
ControlsPanel.Visible = False
ErrorPanel.Visible = True

'add meta tags for noindex
Dim mymeta As New HtmlMeta()
mymeta.Name = "robots"
mymeta.Content = "noindex"
Page.Header.Controls.Add(mymeta)

'RESPOND WITH A 410
Response.StatusCode = 410
Response.Status = "410 Gone"
Response.StatusDescription = "Gone"
Response.TrySkipIisCustomErrors = True
'important for IIS7, otherwise the Custom error page for 404 shows.
Page.Title = "item gone"
End Sub

关于asp.net - 在 Response.RedirectToRoute 之后跳过页面执行的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450094/

相关文章:

asp.net - 如何将CSS应用到文本框?

c# - 缓存 WCF 服务的问题 - "AspNetCacheProfileAttribute can only be used with GET operations"

asp.net - CSS 在 ASP.NET 中不起作用

asp.net - 如何将mdb导入到sql server

.net - 在 LINQ 中与匿名类型不同(在 VB.NET 中)

php - 发布选中和未选中的复选框

c# - 如何使用 visual 2013 处理 telegrambot 中的这个错误?

c# - 委托(delegate)如何提高应用程序的性能?

javascript - 将 asp net linkbutton onclick 和 onclientclick 与 javascript 弹出窗口结合起来

mysql - 使用 vb.net 不使用 picturebox 从 MySQL 检索 BLOB