2013-04-02 2 views
2

У меня есть этот код:Update UpdatePanel от вызываемой WebMethod

<script type="text/javascript" language="javascript"> 
    $(document).ready(function() { 
     $('#refreshDocuments').click(function() { 
      var areaId = 42; 
      $.ajax({ 
       type: "POST", 
       url: "Test.aspx/TimeTest", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 
        alert(data.d); 
       } 
      }); 
     }); 
    }); 
</script> 

...................

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Label ID="lblTime" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 

.... ............... Test.cs

[System.Web.Services.WebMethod] 
    private void TimeTest() 
    { 
     lblTime.Text = DateTime.Now.ToString(); 
     UpdatePanel1.Update();`` 
    } 

метод TimeTest вызывается при нажатии на эту кнопку:

<id="refreshDocuments">Test</a> 

Мой вопрос: Как я могу обновить этикетку в соответствии с моими потребностями?

Спасибо!

+0

Есть ли сервер управления в UpdatePanel, кроме эта ссылка? –

+0

Мой плохой. В моем примере ссылка находится за пределами панели обновления. На панели обновления на самом деле находятся другие элементы управления, которые необходимо обновить. Страница содержит GridView, заполненный данными. GridView находится внутри UpdatePanel, а снаружи - фильтры. Когда нажата кнопка обновления (ссылка в моем примере), GridView должен обновить данные. Спасибо за ваш ответ! –

ответ

3

На самом деле я имел в виду ярлык (моя ошибка). Всюду вы не можете обновить UpdatePanel в методе TimeTest. Более того, этот метод должен быть public static, чтобы разрешить его асинхронно с помощью метода jQuery.ajax из JavaScript. Подробнее здесь: Using jQuery to directly call ASP.NET AJAX page methods

Что вы можете сделать, это использовать LinkButton контроль и зарегистрировать его в качестве AsyncPostBackTrigger для UpdatePanel и делать все сотрудники в обработчике события нажатия этой LinkButton в

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <asp:Label ID="lblTime" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="refreshDocuments" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:LinkButton runat="server" ID="refreshDocuments" 
    Text="Click Me" OnClick="refreshDocuments_OnClick" /> 

protected void refreshDocuments_OnClick(object sender, EventArgs e) 
{ 
    //refresh controls in UpdatePanel1 
    //UpdatePanel1 will be refreshed automatically 
} 
+0

Спасибо! Я пробовал это раньше, но щелчок обновил всю мою страницу, что было плохо. Вероятно, я ошибся. Теперь это работает. –