【问题标题】:Can we change browser url but not redirect after post back?回发后我们可以更改浏览器网址但不重定向吗?
【发布时间】:2013-02-28 18:09:25
【问题描述】:

上下文: 我有一个页面,我从另一个页面中的 gridview 中的链接导航到该页面。

这是当前页面的网址。

http://somedomain.com/timesheet.aspx?tskey=0&emplid=10068323&pnbr=10053911&pbdate=03182012&pedate=03312012&emprcd=0&scheduletype=BW

在此页面上,我进行了一些编辑并点击保存按钮。它被提交到数据库,为我生成 tskey 值。 tskey 是一个查询字符串变量。

现在我保存当前页面后有了 tskey 值,我可以更改当前页面的 url 以在保存点击事件结束时更新 tskey 值而不重定向。

【问题讨论】:

  • 要完成什么?比如,如果你已经有了这个值,为什么还要把它塞进查询字符串?
  • 这种情况下生成tskey后,如果用户碰巧重新加载了tskey=0作为查询字符串值的页面,会抛出异常。因此,请考虑是否可以在回发时更新 tskey 值,但不能通过重定向来更新。我不想使用重定向的原因是,在回发后,我收到一条关于保存的确认消息,但重定向不会发生。如果我的问题看起来不合逻辑,请纠正我...
  • 听起来你真正的问题是“为什么用户刷新会导致异常”......修复它(比如可能在插入之前检查值是否存在)然后你就不需要kludgey解决方法.
  • 你问的不是不合逻辑的。不希望用户重新发布表单是常见问题。只是你的方法不正确。您需要解决用户刷新导致异常的原因......您可以从查询字符串中删除 tskey=0 开始(因为看起来您有一个查询字符串变量只是为了“不”有一个值)并从那里继续前进.
  • 没错,现在我意识到用户总是可以操纵查询字符串并重新加载。现在我在处理此类异常后修复了它。谢谢,迈克

标签: c# asp.net url query-string redirect


【解决方案1】:

想想你在问什么:

  1. 您希望浏览器发布到某个 URL,这将生成一些值,并返回某种 HTTP 响应。
  2. ???
  3. 浏览器现在指向不同的 URL。

第二步必须将 URL 从一个值更改为另一个值。无论您使用服务器重定向还是使用 JavaScript 来更改 document.location,浏览器都必须获取该新页面的内容并呈现它。

如果您想回发到新 URL,这很容易通过 JavaScript 完成,只需使用 Page.ClientScript.GetCallbackEventReference() 将函数放入您的页面,然后调用它。当然这会导致页面重新加载新的响应,但没有办法解决这个问题。如果这不完全符合您的要求,您必须自己渲染和发布表单。

这听起来像是相当多的不必要的工作。您确定需要这样做吗?

【讨论】:

  • 注意它必须渲染“新页面”,即使“新页面”的内容与“旧页面”的内容相同。
  • 没错。 您的意图可能是页面相同,但浏览器无法知道它们是否完全相关。
  • 感谢您的回复,但我不想使用重定向。我希望它是一个常规的回发,但在加载或某些事件中,我想更新 url 中的查询字符串,就像我们对文本框所做的那样。不确定是否有可能。让我知道..
  • 简而言之,我希望它在回发后按预期呈现,除了在回发结束时,我希望 url 更新但不重定向
  • 该 URL 不是页面的一部分,因此无法以这种方式进行更新。它表示生成页面内容的资源。在不重新加载页面的情况下更改 URL 是没有意义的,无论是通过重定向、回发、更改 window.location 等来完成的。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2016-01-02
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2014-06-18
  • 1970-01-01
相关资源
最近更新 更多