【问题标题】:Call ASP.NET 2.0 Server side code from Javascript从 Javascript 调用 ASP.NET 2.0 服务器端代码
【发布时间】: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


【解决方案1】:

查看以下链接:

它们描述了您如何对 JavaScript 中的浏览器关闭做出反应。有了这个,你可以初始化一个从 JavaScript 到服务器的 ajax 请求(在 jQuery 或任何其他 JavaScript 框架的帮助下)!

http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm(适用于 Firefox 和 IE)

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多