【发布时间】:2010-06-24 05:24:55
【问题描述】:
过去 3 天我一直在为此苦苦挣扎。当用户关闭浏览器时,我需要从 Javascript 调用 asp.net 服务器端代码。我正在使用以下代码来完成此操作。在我的 asp.net 表单中,我有各种验证控件。即使有一些验证错误,当我关闭表单时,服务器端代码在我的开发框(windows 7)中也能完美运行。但是相同的代码在我的生产环境(Windows 服务器)中不起作用。
它是否与验证摘要或验证控件有关。按钮控件的原因验证设置为 false。因此,即使存在验证错误,我的表单仍然会发回。我对么?我怀疑当出现验证错误时表单没有回发到服务器。但是我在调用按钮单击事件之前禁用了 javascript 中的所有验证控件。有人可以对这个问题有所了解。
很少有博客建议使用 JQUERY、AJAX(页面方法和脚本管理器)。
function ConfirmClose(e) {
var evtobj = window.event ? event : e;
if (evtobj == e) {
//firefox
if (!evtobj.clientY) {
evtobj.returnValue = message;
}
}
else {
//IE
if (evtobj.clientY < 0) {
DisablePageValidators();
document.getElementById('<%# buttonBrowserCloseClick.ClientID %>').click();
}
}
}
function DisablePageValidators() {
if ((typeof (Page_Validators) != "undefined") && (Page_Validators != null)) {
var i;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorEnable(Page_Validators[i], false);
}
}
}
//HTML
<div style="display:none" >
<asp:Button ID="buttonBrowserCloseClick" runat="server"
onclick="buttonBrowserCloseClick_Click" Text="Button"
Width="141px" CausesValidation="False" />
//Server Code
protected void buttonBrowserCloseClick_Click(object sender, EventArgs e)
{
//Some C# code goes here
}
【问题讨论】:
-
您不能以任何符合标准的方式真正捕获浏览器关闭事件。
-
您需要使用 AJAX。基本上,您正在尝试异步地对服务器端方法进行客户端调用。换句话说,它需要是异步的,因为在用户关闭浏览器之后 - 你不能神奇地“停止”操作并等待你的服务器端代码完成。你需要挂钩客户端浏览器关闭事件,然后触发一些 AJAX 来完成你想要的。
-
RPM1984 - 这是否意味着我的应用程序应该启用 AJAX 或者我是否需要使用 XMLHttpRequest.. 你可以添加提供一些链接
标签: asp.net