ASP.NET - 如何透明地更改请求的页面名称?

时间:2011-09-27 00:07:36

标签: asp.net

这个主题非常新,并且在枪下提出解决方案。问题是如何为任何给定页面加载同一ASPX页面的多个版本之一。例如。对于请求catalog.aspx的毫无疑问的用户来说,我实际上不会为catalog_1.aspx,catalog_2.aspx或catalog_3.aspx等提供服务。

确实有奇怪的要求。这是由于一个继承了十年历史的产品,在整个ASPX上都有内联样式。我没有重新编写数百个ASPX,而是试图将它们替换为适合各种屏幕尺寸的版本。然后我会在用户登录后测量窗口大小后选择最好的一个(并且可能将大小存储在cookie中)。

我认为这会涉及一些像http处理程序这样的低级对象。关闭?

LJ

更新:我最终通过网址重写做到了这一点,效果更好。在asp.net中最简单的地方显然是global.asax,并且在Application_BeginRequest事件下。调用context.RewritePath(newpath,False)将请求发送到请求之外的其他页面。

在我这样做的过程中,目标页面可以从请求更改为请求,如果回发的收件人不是生成视图状态的页面的确切版本,则显然会使回发失败。我试图关闭viewstate验证但没有帮助。因此,一旦用户登录,就必须防止版本之间的翻转。希望这有助于某人。

2 个答案:

答案 0 :(得分:0)

Server.Transfer可能是实现这一目标的最快捷方式。

string TransferTo = string.Empty;

if( Something ) 
     TransferTo = "catalog_1.aspx";
else if( SomethingElse )
     TransferTo = "catalog_2.aspx";
else
     TransferTo = "catalog_3.aspx";

Server.Transfer( TransferTo, false );

Documentation

注意 如果后续页面对它们有回发控制,它们将在该点显示页面的真实URL。如果这很重要,那么这种方法将不起作用。

答案 1 :(得分:0)

我不喜欢这种方法,但也许您可以使用全窗口IFRAME来保存适当的页面 - catalog.aspx只是一个大框架,您可以设置该框架的来源你的代码隐藏。