Панель обновления __dopostback выполняет действие .update (), но не обновляет - PullRequest
1 голос
/ 19 июня 2009

У меня есть страница с двумя панелями обновления, на каждой из которых динамически создается сетка. Updatepanel1 обновляется каждые десять секунд по таймеру. Второе обновление / сетка обновляется, когда элемент выбран в первой сетке.

Я пытаюсь совершить этот подвиг, используя __doPostBack. Этот метод действительно достигает сервера и запускает мой .update на updatepanel2. Я вижу, что updatepanel2 получает данные, но форма никогда не обновляет updatepanel2.

Я могу заставить updatepanel2 отображать данные только тогда, когда отметится таймер updatepanel1, и я установил для updatepanel2 режим «Всегда».

У кого-нибудь есть предложения?

Спасибо

Ответы [ 2 ]

1 голос
/ 15 января 2010

Я вижу, что вы ответили на свой вопрос, но в интересах других, вместо 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

1 голос
/ 24 июня 2009

Ну, я исправил эту проблему. Я изменил использование следующего метода для вызова doPostBack.

http://encosia.com/2007/07/13/easily-refresh-an-updatepanel-using-javascript/

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...