我在表格中有一个“东西”列表,我在每一行都有一个详细信息链接,它将在每个可见行下的隐藏行中加载项目的详细信息,再次单击该链接将隐藏详细信息这个项目。使用简单的jQuery fadeToggle()
目前,详细信息链接是调用指定操作的Ajax.Actionlink()
。
一切都运行正常,除非我想隐藏细节,它再次调用动作,调用逻辑,调用数据库。
显然这是浪费资源,所以我想在条件满足时取消ajax请求;条件是“细节”容器可见。
@Ajax.ActionLink("Details", "DetailsPartial",
new AjaxOptions {
OnBegin = "function(){
checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "');
}",
HttpMethod = "GET",
UpdateTargetId = string.Format("Detail{0}", item.Id),
OnSuccess = "function(){
showElement('" + string.Format("DetailContainer{0}", item.Id) + "');
}",
InsertionMode = InsertionMode.Replace
})
我怀疑我应该在OnBegin上工作,但我还没有找到取消ajax调用的魔术命令。
使用checkLoaded()
函数,我正在检查.css('display') == 'none'
传递的元素ID,因此我需要在那里取消。
我已经搜索了一段时间的解决方案,但找不到一个,也许是因为我不知道如何聪明地问它。感谢帮助。
答案 0 :(得分:3)
如果要取消操作,您需要做的就是在OnBegin方法中返回false。
@Ajax.ActionLink("Details", "DetailsPartial",
new AjaxOptions {
OnBegin = "function(){
return !checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "');
}",
HttpMethod = "GET",
UpdateTargetId = string.Format("Detail{0}", item.Id),
OnSuccess = "function(){
showElement('" + string.Format("DetailContainer{0}", item.Id) + "');
}",
InsertionMode = InsertionMode.Replace
})
答案 1 :(得分:1)
我遇到了同样的问题:即使前一个答案中的匿名函数返回false,也会执行AJAX请求。这是因为OnBegin的内容包装到匿名函数中,如果此函数返回false,则AJAX请求取消。这解决了我的问题:
...
OnBegin = "return function(){
return !checkLoaded('" + string.Format("DetailContainer{0}", item.Id) + "');
}",
...