- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用新的路由功能编写一个 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
最佳答案
我可能会因为不直接回答问题而陷入困境,但我喜欢看到您关于用户体验的更新。我更喜欢你建议的方法。
我喜欢为无效的 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/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!