嗨各种博客中“网站性能提示”的提示之一是“避免重定向”。就我而言,我使用Response.Redirect
作为同一页面。我传递一个查询字符串并向用户显示适当的信息。
Response.Redirect("FinalPage.aspx?NextID=" + ID);
因此,在我们的业务逻辑中,我正在使用不同的信息重新加载相同的页面。
那么我该如何避免重定向?还有其他选择吗?顺便说一下,我的目标是在那里获得一些表现。
答案 0 :(得分:6)
重定向是PRG模式中的R,它是用于处理已发布请求的可接受模式。所以这绝对不是邪恶的。
但是,曾经有一个常见的面试问题:“Server.Redirect()
和Server.Transfer()
之间有什么区别?必须使用哪一个?”< / em>的。人们常说Transfer
因为它不涉及往返,但网络自那时起发生了很大的变化。在那些日子里,你不能重复使用视图中的通用逻辑,除非你使用转移或重定向,但现在尤其是ASP NET MVC,有很多方法可以做到这一点。
在您的情况下,我全都是PRG,我相信重定向在语义上更正确。如果用户单击F5或刷新,它也会阻止表单重新提交。
答案 1 :(得分:3)
建议用于不必要的重定向。
您的情况不同 - 您正在向页面传递信息,这与常规重定向(即移动的页面)并不完全相同。
答案 2 :(得分:0)
您还可以执行Server.Transfer
,它不需要新请求,从而减轻服务器上的负担。比较两者的更多信息是here。
在您的情况下,您确实想要进行重定向,因为您正在修改查询字符串并更改页面上的内容,而不是将初始请求的处理转移到另一个页面。
答案 3 :(得分:0)
主要的“邪恶”如果可以被称为重定向需要额外的往返;客户端请求一个页面(通常是同一页面,指定单击特定按钮),服务器响应说“请求此页面”,然后浏览器符合,导致服务器实际提供下一页。 / p>
有时需要这样做,但现在有更好的方法来控制网站中的导航。例如,代替导致回发和重定向的“表单”按钮,您可以使用行为类似于超链接的LinkButton,允许浏览器直接请求新页面。您还可以使用显示不同ASCX的MultiView,并通过视图翻转控制导航(但是,要了解这可能有其自身的性能影响,尤其是在以嵌套方式使用它们时)。
答案 4 :(得分:0)
我认为如果您想重定向到同一页面而不是Response.Redirect("FinalPage.aspx?NextID=" + ID);
,您可以NextID
使用ViewState
或Hidden Field
,这样您就不需要重定向SAME page
,然后检查hidden field
或viewstate
,而不是检查QueryString
:d