Я вижу, что вы ответили на свой вопрос, но в интересах других, вместо doPostBack (), почему бы не установить оба параметра на таймере для обновления с заданным интервалом или в качестве метода события Tick с помощью UpdatePanel1.Update () "в конце метода? Для этого вам нужно установить интервал в самом коде страницы Default.aspx; Я выбрал 10 мс, чтобы он мог показать прогресс для очень быстрой операции:
<asp:ScriptManager ID="ScriptManager1" runat="server" AsyncPostBackTimeout="360000" />
<asp:Button ID="btnDoSomething" runat="server" Text="Do Something" OnClick="btnDoSomething_Click" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load" UpdateMode="conditional">
<ContentTemplate>
<span id="spnLabel" runat="server">
<asp:Timer ID="Timer1" runat="server" Interval="10" OnTick="Timer1_Tick"></asp:Timer>
</ContentTemplate>
<Triggers >
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
Затем в методе кода есть метод Timer1_Tick, который вызывается при обновлении - в этом примере кое-что добавить в spnLabel.InnerHtml из метода btnDoSomething_Click ():
protected void btnDoSomething_Click(object sender, EventArgs e)
{
Timer1.Enabled = true;
Timer1.Interval = 10;
Timer1_Tick(sender, e);
Timer1.Enabled = false;
}
protected void Timer1_Tick(object sender, EventArgs e)
{
spnLabel.InnerHtml = "hi";
UpdatePanel1.Update();
}
Помните, что обновление контролируется интервалом Timer, а не при вызове Timer1_Tick (sender, e), даже если в конце у вас есть UpdatePanel1.Update () - например, если вы установите интервал в 10000, он обновится через 10 секунд, даже если ваша операция несколько раз использовала метод Timer1_Tick (). Тем не менее, вам все равно понадобится UpdatePanel1.Update () в конце, несмотря на это.
-Tom