2

我有一个MVC 3项目,大量使用片段动态加载不同页面的内容。有些页面发回控制器以上传文件。上传完成后,我想将用户重定向到他们来自的页面。我将返回URL传递给上传操作,然后在上传完成后将用户重定向回该页面。重定向到一个URL,IE 8忽略片段

这可以在Chrome和Firefox中正常工作,但是IE忽略了片段,并且我被带回到解决方案中的根页面。以下是我用来重定向用户的代码。

public virtual ActionResult UploadFile(string returnURL) 
{ 
    // Do some work here... 
    return Redirect(returnURL); 
} 

有什么办法可以强制IE 8保留片段并像Chrome和Firefox一样行事吗?

如果没有,是否有标准的方法来解决这个问题?

我也评论过Eric重定向和片段的Eric Law的article。它提供了关于片段如何由不同浏览器处理的一些见解。

+0

(1)当你被重定向回来,IE地址栏中的url是否包含你的片段,以及(2)你能显示使用片段导航的客户端代码吗? – 2012-07-26 18:46:52

+0

(1)不,IE在重定向后不会在URL中显示片段。 (2)客户端代码似乎并不重要。如果我重定向到一个带有片段的stackoverflow url,IE会丢弃这个片段,但Chrome和Firefox会保留它。 – 2012-07-26 19:08:00

回答

2

你可能会在这一个小河上。 URL片段对于URL的唯一性并不重要,比如决定是将页面添加到浏览器缓存还是将URL添加到浏览器导航历史记录中。

URL查询包含在URL唯一性分类中,但片段不是。

可能是IE8重定向到带有片段的URL,但它正在从浏览器缓存加载根页面(没有片段),因为该片段对于URL缓存等效性测试并不重要。

测试此理论的一种蛮力方法可能是清除浏览器缓存并将所有页面标记为服务器上的no-cache,并查看是否会更改IE8行为。如果IE8在页面不在浏览器缓存中时重定向到所需的页面,并且片段完好无损,那么这将确认理论。这只是一个测试场景,不是生产部署的解决方案。

+0

不幸的是,no-cache设置不会影响行为。 – 2012-07-11 17:57:19

0

我已经构建了一个小应用程序来重现它。它在IE9和Chrome中按预期工作。

我对你有两个建议:

  • 如果它是一个缓存的问题将在URL中的时间戳可以帮助。尝试建立一个URL是这样的:

http://localhost:50173/Sample/?timestamp=26.07.2012%2021:11:00#myLocation

  • 如果它不工作解决方法可能是呈现在最后一个javascript将浏览:

window.location = window.location + "#myLocation";

+1

我同意IE9和Chrome的工作,不幸的是,我必须处理IE 8,这似乎有问题。我无法在我的js中对片段进行硬编码,因为它基于用户尝试击中的页面进行动态显示。一个用例是用户去了一个URL,但他们的会话超时,他们需要重新登录。重新登录后,我想把他们带回他们所在的页面。 – 2012-07-26 19:40:55