繁体   English   中英

每当调用RewritePath()时,Page.IsPostBack为false

[英]Whenever RewritePath() is called, Page.IsPostBack is false

我正在为ASP.Net 3.5项目开发自定义URL重写器。 该重写器在功能上与大多数重写器没有区别,唯一的区别是友好的URL集合不是从web.config文件加载的,而是来自数据库的。 我天真地假设,从头开始开发自定义重写器模块会很容易,但是现在我知道自己一团糟了。 让我们直接解决技术问题。

在测试重写器时,我设置了一个友好的URL,它将用户带到Web表单。 像任何人所期望的那样,此表单的回发不应更改友好地址,因此

http://my.web.site/app_root/FriendlyURL始终被重写为http://my.web.site/app_root/not_friendly/form.aspx

当浏览器首次加载FriendlyURL时,一切都很好。 该页面出现,并且完全可以使用。 但是,将表单发布回服务器时,页面只是重新加载,但是在服务器端, IsPostBack为false。 就像F5被击中一样,只是确实发生了HTTP POST。

毫不奇怪,当通过“不友好的” URL进行交互时,POST操作将按预期触发回发。 该证据表明HttpContext.RewritePath以某种方式弄乱了页面生命周期,从而失去了对回发操作的理解。 有方向吗? 谢谢。

多亏了StackOverflow,另一个几乎重复的问题为我提供了有关核心问题的提示。 简而言之,

设置PostBackUrl属性的服务器端组件在回发期间会与路径重写系统混淆。 否则在路径重写期间回发系统会混乱。 (因果关系尚不清楚,但是效果是我在问题中描述的。)

设置PostBackUrl (在表单,母版页或用户控件级别)的任何asp:LinkBut​​ton,asp:Button或asp:ImageButton都会导致Web表单包含内容不透明的__PREVIOUSPAGE隐藏元素,但它在回发期间具有一定作用。 这是我的问题:有几个设置PostBackUrl属性的asp:LinkBut​​tons。

当页面(窗体+母版页+用户控件)中没有PostBackUrl'd元素时, __PREVIOUSPAGE消失并且回 __PREVIOUSPAGE混乱了。 因此,在查看了整个站点中的每个asp:LinkBut​​ton并将其转换为普通的<a>元素之后,问题得以解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM