检查网站是否在线 - 回发问题

时间:2014-03-26 15:36:28

标签: c# javascript webforms

我有一个网页,我公司的人正在使用手机填写。唯一的问题是,如果他们离开信号区域,那么当他们尝试更新他们的工作时,页面将转到未找到的页面"他们将失去他们已经填补的工作。

我试图解决这个问题,并且目前有这个解决方案:

protected void Button1_Click(object sender, EventArgs e)
{
    Session["Online"] = 0;
    CheckConnect();
    if ((int)Session["Online"] == 1) { Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "alertMessage", "alert('You are currently online')", true); }
    if ((int)Session["Online"] == 0) { Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "alertMessage", "alert('You are currently offline')", true); }
}

protected void CheckConnect()
{
    System.Uri Url = new System.Uri("http://www.mypage.com/pixel.jpg?" + DateTime.Now);
    System.Net.WebRequest WebReq;
    System.Net.WebResponse Resp;
    WebReq = System.Net.WebRequest.Create(Url);
    try
    {
        Resp = WebReq.GetResponse();
        Resp.Close();
        WebReq = null;
        Session["Online"] = 1;
    }
    catch
    {
        WebReq = null;
        Session["Online"] = 0;
    }
}

现在,这将检查www.mypage.com上的像素文件是否存在(不,这实际上不是我的页面,我已经为此示例替换了它),如果是,则返回a 0,如果不是1.哪个好,花花公子。

但是,按下按钮会导致页面重新加载。然后,如果它处于离线状态,则会执行通常的"页面未找到"商业。我的按钮代码在这里:

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

基本上,我希望它不会重新加载页面,如果我们离线(或者确实如果我们在线,因为更新处理该部分的代码无论如何)。

编辑 - 好吧,现在采用不同的方法。完全通过javascript使用以下内容完成此操作:

<asp:Button ID="Button1" runat="server" OnClientClick="ifServerOnline()" Text="Button" />

        <script type="text/javascript">
            function ifServerOnline(ifOnline, ifOffline)
            {
                var img = document.body.appendChild(document.createElement("img"));
                img.onload = function ()
                {
                    ifOnline && ifOnline.constructor == Function && ifOnline();
                };
                img.onerror = function ()
                {
                    ifOffline && ifOffline.constructor == Function && ifOffline();
                };
                img.src = "http://www.mypage.com/pixel.jpg?" + Date.now;
            }

            ifServerOnline(function ()
            {
                return confirm('Online');
            },
            function ()
            {
                return confirm('Offline');
            });
        </script>

不幸的是仍然导致页面刷新。

3 个答案:

答案 0 :(得分:4)

在您网页的javascript分配表单onsubmit事件处理程序中,您取消默认提交。此外,在此事件处理程序中,使用非常简短的响应向服务器发出ajax请求。在此ajax请求的onsuccess事件处理程序中 - 在onerror处理程序中重新提交表单 - 告诉用户他们失去了与服务器的连接。

答案 1 :(得分:1)

离线时无法回发到服务器。 没办法......

但也许你可以用javascript做到这一点..尝试这种方式。

答案 2 :(得分:0)

用这个管理它......

        <asp:Button ID="btnRouteC" runat="server" OnClientClick="return ifServerOnlineA(ifServerOnlineA1, ifServerOfflineA1);" Text="Route" Width="45%" />

        <script type="text/javascript">
            function ifServerOnlineA(ifOnline, ifOffline)
            {
                var img = document.body.appendChild(document.createElement("img"));
                img.onload = function ()
                {
                    ifOnline && ifOnline.constructor == Function && ifOnline();
                };
                img.onerror = function ()
                {
                    ifOffline && ifOffline.constructor == Function && ifOffline();
                };
                img.src = "http://www.myserver.com/pixel.jpg?" + Date.now;
                return false;
            }

            function ifServerOnlineA1()
            {
                document.getElementById('btnRoute').click();
                return false;
            }
            function ifServerOfflineA1()
            {
                alert("There is no connection at the moment. Please try again later.");
                return false;
            }
        </script>

正如Itiel所说,它不会通过代码隐藏工作,但会通过Javascript。