我需要进行回发并在屏幕关闭时将屏幕中的数据保存到会话中,为此我使用onBeforeUnload事件,并在屏幕中放置一个隐藏按钮。在卸载前的事件中,我调用click事件来调用按钮服务器事件。但事件并未触发。我在这里缺少什么。
<asp:Button Style="display: none" runat="server" ID="btnHidUpdate" OnClick="btnHidUpdate_Click" />
<script type="text/javascript">
$(document).ready(function () {
window.onbeforeunload = updateSessionBeforeUnload;
});
</script>
在.js文件中:
function updateSessionBeforeUnload() {
var hidUpdate = $('[id$="btnHidUpdate"]')[0];
hidUpdate.click();
}
在.cs代码背后:
protected void btnHidUpdate_Click(object sender, EventArgs e)
{
UpdateSession();
}
答案 0 :(得分:1)
问题是页面在执行按钮点击之前加载下一页。
使用Jquery Unload事件,例如
$(function(){
$(window).unload(function(){
// put synchronous code here to persist what you need.
});
});
您可以像Yuriy一样使用Ajax事件,但是您必须将async
设置为false
,如下所示:
$.ajax({
type: "POST",
url: "Url/To/Persistance",
dataType: "json",
data : { "data" : "to be persisted"},
async: false
});
修改强> 我会一起避免点击事件,并做这样的事情:
$(function(){
$(window).unload(function(event){
var hidUpdate = $('[id$="btnHidUpdate"]')[0];
__doPostBack(hidUpdate.attr('id'),'');
});
});
但是,如果您必须,请点击按钮,试试这个
$(function(){
$(window).unload(function(event){
var hidUpdate = $('[id$="btnHidUpdate"]')[0];
hidUpdate.click()
alert(
"Default: " + event.isDefaultPrevented() + "\n" +
"ImedPropStopped: " + event.isImmediatePropagationStopped() + "\n" +
"PropStopped: " + event.isPropagationStopped()
);
});
});
并告诉我们警报说的是什么?
答案 1 :(得分:1)
我认为这里的其他建议应该可行。我有另一个建议,您可以尝试,并使用GetPostBackEventReference。 你可以在这里看到它的详细信息: http://msdn.microsoft.com/en-us/library/aa720417(v=vs.71).aspx
答案 2 :(得分:0)
您可以使用jquery触发器(“click”)函数调用按钮上的click事件。
答案 3 :(得分:0)
在我看来,问题是onbeforeunload
事件处理程序旨在要求用户在他想要离开页面时进行确认。并且由于updateSessionBeforeUnload
方法不返回任何问题字符串,因此在此方法离开后立即继续卸载过程。
如果您可以将UpdateSession
方法设为静态,则可以使用异步jQuery.ajax
方法调用异步调用它:
<script type="text/javascript">
window.onbeforeunload = foobar;
function foobar() {
$.ajax({
type: "POST",
url: "WebForm2.aspx/UpdateSession",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true
});
}
</script>
[WebMethod]
public static void UpdateSession()
{
}