这个主题非常新,并且在枪下提出解决方案。问题是如何为任何给定页面加载同一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验证但没有帮助。因此,一旦用户登录,就必须防止版本之间的翻转。希望这有助于某人。
答案 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 );
注意强> 如果后续页面对它们有回发控制,它们将在该点显示页面的真实URL。如果这很重要,那么这种方法将不起作用。
答案 1 :(得分:0)
我不喜欢这种方法,但也许您可以使用全窗口IFRAME来保存适当的页面 - catalog.aspx
只是一个大框架,您可以设置该框架的来源你的代码隐藏。