Я пытаюсь заставить кнопку на стороне сервера сделать что-то на стороне клиента (id="formSrvBtn"
), но по какой-то причине функция setInterval работает не так, как ожидалось (выражение для оценки не оценивается), я также попытался использовать кнопку клиента вместо кнопки сервера (id="formCltBtn"
), которая также была бы допустимой опцией, но с тем же нежелательным результатом... Единственный способ заставить ее работать - это положить кнопку полностью за пределы серверный контекст (id="cltBtn"
), который не является допустимым вариантом в нашем сценарии реальной жизни.
Heres - это html для небольшой aspx, подтверждающей все вышеперечисленное:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebApplication1._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<script type = "text/javascript">
function dumb_setInterval() {
setInterval(function(){alert('dumb setInterval after 5000ms!');}, 5000);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<p><asp:ImageButton id="formSrvBtn"
runat="server"
OnClientClick="dumb_setInterval();"
AlternateText="This server img button setInterval does not work!"
>
</asp:ImageButton></p>
<p><button id="formCltBtn"
onclick="dumb_setInterval();"
>
This client button setInterval does not work!
</button></p>
</form>
<p><button id="cltBtn"
onclick="dumb_setInterval();"
>
This client button setInterval works!
</button></p>
</body>
</html>
Форма (id="form1"
) должна быть сервером runat в нашем сценарии реальной жизни, поэтому мне нужно получить кнопки (id="formSrvBtn"
или id="formCltBtn"
), щелкнув событие, которое правильно id="formCltBtn"
setInterval.
Здесь решение rep (для visual studio 2005, извините...): https://github.com/RASMiranda/setIntervalRunAtServer
И вот прямая ссылка для скачивания решения: https://github.com/RASMiranda/setIntervalRunAtServer/archive/master.zip
Вы должны убедиться, что поведение OnClientClick
по умолчанию на вашем ImageButton
не вызывается, так как это приведет к обратной передаче. Вы можете сделать это, вернув false из своего dumb_setInterval()
:
function dumb_setInterval() {
setInterval(function(){alert('dumb setInterval after 5000ms!');}, 5000);
return false;
}
Затем добавив оператор return к вашему атрибуту:
<asp:ImageButton id="formSrvBtn"
runat="server"
OnClientClick="return dumb_setInterval();"