【问题标题】:Is there any way to modify query strings without breaking an ASP.Net postback?有没有办法在不破坏 ASP.Net 回发的情况下修改查询字符串?
【发布时间】:2010-09-26 01:47:42
【问题描述】:

从这里和网上的阅读来看,我几乎假设答案是“不”,但是......

假设我有一个有时包含查询字符串参数的 ASP.Net 页面。如果页面有查询字符串参数,我想在回发之前、期间或之后将其剥离。该页面已经有很多客户端脚本(纯 JavaScript 和 jQuery)。

例如,假设我加载:

http://myPage.aspx?QS=ABC

QS 参数是控制页面首次加载时显示的内容所必需的,并且由“调用”它的页面设置。 myPage.aspx 有需要填写的表单元素,并有一个执行回发的提交按钮。当页面完成回发后,我需要返回的 URL 为:

http://myPage.aspx

为了避免出现查询字符串时调用的客户端代码。换句话说,在提交之后,我不希望触发与查询字符串参数关联的客户端操作。我知道我可以将表单内容作为查询字符串参数本身附加到 URL,然后重定向到新 URL 并避免提交/回发,但这需要对代码隐藏进行更多类型检查,以避免错误数据和随意欺骗。我想我也可以在代码隐藏中设置一个隐藏字段,并与查询字符串一起查看它,以在我从回发回来时取消客户端行为,但这仍然使查询字符串基本上永远完好无损,我想要在初始页面加载后摆脱它。

有什么想法或最佳实践吗?

PS - 我可以用 Form.Action 属性做些什么而不破坏回发行为?

【问题讨论】:

    标签: asp.net javascript jquery html asp.net-2.0


    【解决方案1】:

    这可能是不好的做法,但在这些情况下(我只需要“重置”页面),我只需执行 Response.Redirect 到同一页面。

    【讨论】:

    • IIRC,Response.Redirect 将丢失我的视图状态,Server.Transfer 将保留我的视图状态(即使转到完全不同的页面),但会保持 URL(带有查询字符串)完好无损.我在这里没有看到优势。
    • 加上额外往返的一个相当大的缺点
    【解决方案2】:

    我不确定这是您要查找的内容,但如果理解正确,您可以这样做:

    -在页面加载时检查 QS 值,如果不存在,则使用隐藏的输入字段。

    -首次使用 QS 加载页面时,进行正常处理并将 QS 值存储在隐藏的输入字段中。

    -如果没有QS则使用隐藏的输入值

    -回发后,您可以重定向到同一页面,此时您可以使用 Request.Form[] 检索隐藏的输入字段,仍然可以正确加载数据但摆脱 QS。

    这在我的脑海中是有道理的,我现在不确定它是否有道理,但我会让你决定。

    【讨论】:

      【解决方案3】:

      我会使用HTTPModule 来拦截并重写 URL 和查询。我不是 100%,但我不相信这对视图状态有任何影响。

      听起来(和看起来)很复杂,但实际上相当琐碎,并且可以进行大量改进和扩展(通常按照 .NET)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 2013-07-12
        • 2011-12-15
        相关资源
        最近更新 更多