#c# #asp.net #javascript #static #methods
Вопрос:
У меня есть страница, которая каждые 5 секунд обращается к веб-сервису, чтобы обновить информацию на странице. Я использую DynamicPopulateExtender из набора инструментов управления Ajax, чтобы просто заполнить панель некоторым текстом.
Что я хотел сделать, так это, если будет выполнено определенное условие, полностью обновить страницу.
Смогу ли я сделать это в текущем методе, который у меня есть? вот мои текущие вещи:
ASP.NET
<cc1:DynamicPopulateExtender ID="DynamicPopulateExtender1" runat="server"
ClearContentsDuringUpdate="true" TargetControlID="panelQueue" BehaviorID="dp1"
ServiceMethod="GetQueueTable" UpdatingCssClass="dynamicPopulate_Updating" />
Язык JavaScript
Sys.Application.add_load(function(){updateQueue();});
function updateQueue()
{
var queueShown = document.getElementById('<%= hiddenFieldQueueShown.ClientID %>').value;
if(queueShown == 1)
{
var behavior = $find('dp1');
if (behavior)
{
behavior.populate();
setTimeout('updateQueue()', 5000);
}
}
}
СЕРВЕР (C#)
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string GetQueueTable()
{
System.Text.StringBuilder builder = new System.Text.StringBuilder();
try
{
// do stuff
}
catch (Exception ex)
{
// do stuff
}
return builder.ToString();
}
Ответ №1:
- Вы ничего не можете сделать со своим ASMX.
- Вы можете обновить страницу с помощью JavaScript, используя обычную перезагрузку страницы или выполнив обратную передачу, которая выполнит изменения на стороне сервера, а затем обновит ее с помощью панели обновления или, проще говоря, ответа.Перенаправлять.
Ответ №2:
Вы можете принудительно отправить обратную передачу из Javascript, см. Пример на этой странице Default.aspx:
По умолчанию.aspx
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" language="javascript">
function forcePostback()
{
<%=getPostBackJavascriptCode()%>;
}
</script>
</head>
<body onload="javascript:forcePostback()">
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Postbacking right now..."></asp:Label>
</div>
</form>
</body>
</html>
По умолчанию.aspx.cs
namespace ForcingApostback
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) Label1.Text = "Done postbacking!!!";
}
protected string getPostBackJavascriptCode()
{
return ClientScript.GetPostBackEventReference(this, null);
}
}
}
На стороне клиента при любых условиях вы можете вызвать функцию Javascript forcePostback() для принудительной обратной передачи.
Комментарии:
1. Это здорово, спасибо! При перезагрузке генерируется предупреждение «Firefox должен отправить информацию, которая повторит любое действие, выполненное ранее…». При этом предупреждение отменяется и генерируется обновление. Это минимальный код, действительно элегантный.