我有一个MVC 3项目,它大量使用片段来动态加载不同页面的内容。有些页面会发布回控制器以上载文件。上传完成后,我想将用户重定向回他们来自的页面。我将返回URL传递给上传操作,然后在上传完成后将用户重定向回该页面。
这在Chrome和Firefox中正常工作,但IE忽略了片段,我被带回了解决方案中的根页面。下面是我用来重定向用户的代码。
public virtual ActionResult UploadFile(string returnURL)
{
// Do some work here...
return Redirect(returnURL);
}
有没有办法强制IE 8保留碎片,并像Chrome和Firefox一样行事?
如果没有,是否有解决这个问题的标准方法?
我还复习了Eric Law关于https重定向和碎片的文章。它提供了一些关于不同浏览器如何处理碎片的见解。
你可能在这件事上遇到了麻烦。URL片段对于URL唯一性并不重要,例如在决定是将页面添加到浏览器缓存还是将URL添加到浏览器导航历史时。
URL查询包含在URL唯一性分类中,但片段没有。
IE8可能正在重定向到带有片段的URL,但它正在从浏览器缓存加载根页面(没有片段),因为该片段对URL缓存等效性测试并不重要。
测试这一理论的一种暴力方法可能是清除浏览器缓存,并在服务器上将所有页面标记为无缓存,看看这是否会改变IE8的行为。如果IE8在页面不在浏览器缓存中时重定向到所需的页面,并且片段完好无损,那么这将证实这一理论。这只是一个测试场景,而不是生产部署的解决方案。
我已经构建了一个小应用程序来复制它。它在IE9和Chrome中的工作与预期的一样。
我有两个建议给你:
- 如果是缓存问题,在URL中添加时间戳可能会有所帮助。尝试构建这样的URL:
http://localhost:50173/Sample/?timestamp=26.07.2012%2021:11:00#myLocation
- 如果它不起作用,解决方法可能是在末尾呈现一个javascript,该javascript将导航:
window.location = window.location + "#myLocation";