如上所述,没有任何事情应该实际上工作。页面隐藏和卸载不做任何事情。
我发现提到如何解决这个问题,但没有细节,所以我虽然我会在这里详细说明。
该解决方案适用于地区和标准站点。
我解决这个问题的方法之一是检测浏览器是否在IOS上运行,如果是,则更改菜单中的链接。
<li>
@{
if(Request.UserAgent.Contains("iPad") || Request.UserAgent.Contains("iPhone"))
{
<a onclick="IOSReleaseLock('controller', 'action')" href="javascript:void(0);">LinkText</a>
}
else
{
@Html.ActionLink("link Text","action","controller",new { Area = "Tasks" },null);
}
}
</li>
在应用程序每一个环节都需要有一个叫做IOSReleaseLock可用的功能()或解决方案将无法工作。并非所有页面都会锁定记录,只有那些实际更改文档的记录。报告和基本网站功能(如更改密码,注销和系统管理员)不需要记录锁定。
在这一点上我有2个版本IOSReleaseLock的()
这是在不要求解锁页面中使用的版本。
function IOSReleaseLock(_controller, _action)
{
var url = '/__controller__/__action__/';
url = url.replace('__controller__', _controller);
url = url.replace('__action__', _action);
window.location.href = url;
}
这是放置在需要解锁的页面上的版本。
function IOSReleaseLock(_controller, _action)
{
var url = '/__controller__/__action__/';
url = url.replace('__controller__', _controller);
url = url.replace('__action__', _action);
UnloadingRecordLockRelease();
window.location.href = url;
}
每个链接都有一个包装,所以每一个页面都必须加载一个IOSReleaseLock()版本。这包括您的/ home/index或您的应用程序启动的位置。如果你错过了那么一旦你在该页面上,你的菜单系统链接将不再工作。
需要UnloadingRecordLockRelease()函数加载该版本的页面以及不需要解锁的页面加载第一个版本。
在IOS上,每当你点击一个链接时,都会调用IOSReleaseLock()。这看起来很明显,但为了清楚起见,执行的IOSReleaseLock()版本是当前页面上的版本,而不是您要访问的页面上的版本。
因此,只要用户停留在网站上并且没有关闭浏览器,记录就可以正确解锁。
当用户注销时,所有记录都被解锁,但当浏览器选项卡关闭或者浏览器关闭时没有用户注销时,我无法解决问题。