【问题标题】:Whenever RewritePath() is called, Page.IsPostBack is false每当调用 RewritePath() 时,Page.IsPostBack 为 false
【发布时间】:2011-03-23 19:34:15
【问题描述】:

我正在为 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 以某种方式扰乱了页面生命周期,从而失去了回发操作的意义。有什么方向吗?谢谢。

【问题讨论】:

  • 我认为 Humberto 是对的,但作为参考,我记得至少从 2.0 开始,在使用回发的页面上重写 URL 时,您还必须调整 Form.Action 值。

标签: c# asp.net url-rewriting


【解决方案1】:

感谢 StackOverflow,另一个 nearly-duplicate problem 给了我关于核心问题的提示。总之,

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

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

当页面(表单 + 母版页 + 用户控件)没有 PostBackUrl 的元素时,__PREVIOUSPAGE 消失,回发混乱也消失了。所以在我查看了整个站点中的每个asp:LinkBut​​ton,并将它们转化为普通的<a>元素后,问题就解决了。

【讨论】:

    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多