2011-02-04 212 views
5

嗨在各种博客中的“网站性能提示”中的一个提示是“避免重定向”。就我而言,我在同一页面上使用了Response.Redirect。我传递一个查询字符串并向用户显示适当的信息。Response.Redirect()asp.net的替代方法是什么?

Response.Redirect("FinalPage.aspx?NextID=" + ID); 

所以在我们的业务逻辑中,我用不同的信息重新载入同一页面。

那么,如何避免重定向?还有其他的选择吗?顺便说一句,我的目标是在那里获得一些表现。

回答

6

重定向是PRG模式中的R,它是处理张贴请求的可接受模式。所以这绝对不是坏事。

然而,曾经有一个共同的面试问题:“是什么Server.Redirect()Server.Transfer()和一个必须使用之间的区别” 。人们过去说Transfer,因为它不涉及往返,但自那以后,网络发生了很大的变化。在那些日子里,除非使用Transfer或Redirect,否则你不能重用视图中的通用逻辑,但现在特别是使用ASP NET MVC时,有很多方法可以实现这一点。

在你的情况,我都为PRG,我相信重定向在语义上更加正确。此外,如果用户单击F5或刷新,它可以防止表单重新提交。

0

你也可以做一个Server.Transfer,它不需要新的请求进来,从而减轻了服务器的负担。比较两者的更多信息是here

在你的情况下,你确实想做一个重定向,因为你正在修改查询字符串并改变页面上的内容,而不是将初始请求处理转移到另一个页面。

3

推荐是不必要的重定向。

您的情况不同 - 您将信息传递到页面,这与常规重定向(即移动的页面)不完全相同。

0

如果可以这样称呼主要的“邪恶”,那就是重定向需要额外的往返行程;客户端请求一个页面(通常是同一页面,指定一个特定的按钮被点击),服务器响应说“请求这个页面”,然后浏览器遵循,导致服务器实际上服务下一页。

有时需要这样做,但现在有更好的方法来控制网站中的导航。例如,您可以使用LinkBut​​ton来代替超链接,从而允许浏览器直接请求新页面,而不是使用“form”按钮来引发回发和重定向。您还可以使用显示不同ASCX的MultiView,并通过视图翻转来控制导航(但是,了解这可以有其自身的性能影响,特别是在以嵌套方式使用它们时)。

0

我觉得如果你想重定向到同一个页面,然后而不是做Response.Redirect("FinalPage.aspx?NextID=" + ID);你可以用ViewStateNextIDHidden Field,这样你就不需要重定向SAME page然后检查hidden fieldviewstate,而不是检查QueryString

:D

相关问题