我有一个网页,我公司的人正在使用手机填写。唯一的问题是,如果他们离开信号区域,那么当他们尝试更新他们的工作时,页面将转到未找到的页面"他们将失去他们已经填补的工作。
我试图解决这个问题,并且目前有这个解决方案:
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>
不幸的是仍然导致页面刷新。
答案 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。