有没有办法在不破坏ASP.Net回发的情况下修改查询字符串?

时间:2008-12-09 15:44:23

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

从这里和网上阅读,我接近假设答案是“不”,但......

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

举个例子,假设我加载:

http://myPage.aspx?QS=ABC

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

http://myPage.aspx

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

任何想法或最佳做法?

PS - 对于不会破坏回发行为的Form.Action属性,我能做些什么吗?

3 个答案:

答案 0 :(得分:2)

我会使用HTTPModule拦截并重写URL和查询。我不是100%,但我不认为这对viewstate有任何影响。

听起来(并且看起来)很复杂,但它实际上相当简单,并且可以进行大量的改进和扩展(根据.NET一般而言)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我不确定这是你在寻找什么,但如果理解正确,你可以这样做:

- 页面加载检查QS值,如果它没有使用隐藏的输入字段。

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

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

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

这在我的脑海里是有意义的,我现在不确定它是否有意义,但我会让你决定。