2011-06-21 13 views
6

Staram się mieć dwie rzeczy dzieją się po kliknięciu na przycisk w stronę programu ASP.NET:Aktualizacja etykieta ASP.NET po kliknięcia przycisku, za pomocą UpdatePanel

  1. zmienić tekst w asp: Label .
  2. Wyłącz przycisk.

Zrobiłem dużo badań na ten temat, ale miałem trudności z robieniem albo.

Dla # 1, myślałem, że to powinno działać, ale nie:

<%@ Page Language="VB" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 


    Protected Sub BtnSubmit_Click(sender As Object, e As System.EventArgs) 
     Label1.Text = "Working..." 

     System.Threading.Thread.Sleep(5000) 

     Label1.Text = "Done." 

    End Sub 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Test Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <ajaxToolkit:ToolkitScriptManager runat="server" /> 
    <div> 
     <asp:ListBox runat="server" Height="100px" /> 
     <br /> 
     <asp:UpdatePanel runat="server"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="BtnSubmit" EventName="Click" /> 
      </Triggers> 
      <ContentTemplate> 
       <asp:Label ID="Label1" runat="server" Text="Press the button" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
     <br /> 
     <asp:Button runat="server" ID="BtnSubmit" OnClick="BtnSubmit_Click" Text="Submit Me!" /> 
    </div> 
    </form> 
</body> 
</html> 

Komunikat "Working ..." nie jest wyświetlany.

Co do # 2, dodałem to do przycisku (nie pamiętam gdzie znalazłem go):

OnClientClick="this.disabled = true; this.value = 'Working...';" 
      UseSubmitBehavior="false" 

który miał pożądany efekt wyłączenie przycisku i zmieniając jego tekst (wartość), ale nie można było go zmienić za pomocą właściwości Tekst i Włączone.

Odpowiedz

0

ASP nie opróżnia wyniku przeglądarki podczas pracy, nawet jeśli używasz UpdatePanel. Kończy pracę (w tym snu) przed płukaniem.

Możesz użyć UpdateProgress, aby wyświetlić tekst "Working ..".

<asp:UpdateProgress> 

Pokaże swoją zawartość, gdy działa UpdatePanel. Po zakończeniu aktualizacji UpdatePanel zawartość zniknie.

co trzeba w was ClickEvent jest:

Label1.Text = "Done." 
btnSubmit.Enabled = false 

To pokaże Gotowe teksty i wyłączyć przycisk. I powiedz UpdateProgress, aby zniknął.

-1

Po pierwsze, "working" nigdy nie pojawia się, ponieważ ostateczna wartość etykiety w chwili odesłania jest "Gotowe". Pomyśl o tym, co się tutaj dzieje - kliknij przycisk, który powoduje odesłanie do serwera. Przetwarza post-back, który obejmuje uruchomienie kodu kliknięcia przycisku, którego wynik jest następnie wysyłany z powrotem do przeglądarki. Twój "pracujący" tekst nigdy nie wraca z powrotem przez przewód.

nie jestem jasne, na co starasz się osiągnąć za pomocą kodu po stronie klienta, ale do tego, co można opisać jesteś almsot tam po stronie serwera:

Protected Sub BtnSubmit_Click(sender As Object, e As System.EventArgs) 
    Label1.Text = "Done." 
    btnSubmit.Enabled = false 
End Sub 

Również ale twój link wewnątrz znaczników szablonu panelu aktualizacji, aby uczestniczyć w odsyłaniu do ajax-a.

0

Komunikat roboczy nigdy nie jest wyświetlany, ponieważ wykonywany jest skrypt na serwerze, który nie odpowiada na klienta, dopóki metoda nie zostanie zakończona.

ASP.NET AJAX ma wbudowaną kontrolę wyświetlania takich komunikatów, gdy UpdatePanel czeka na serwerze.

Sprawdź Kontroli UpdateProgress:

<asp:UpdateProgress runat="server" id="progress" ><ProgressTemplate>Working...</ProgressTemplate></asp:UpdateProgress> 

Można wyłączyć przycisk ustawiając właściwość false Enabled w swojej metody po stronie serwera.

BtnSubmit.Enabled = false 
+0

Idealny. Jestem trochę zakłopotany, że tego nie znalazłem. Dziękuję Tobie i wszystkim innym za poświęcony czas. – rht341

0

@ 1: Nigdy nie zobaczysz komunikatu "Praca" po zatrzymaniu wątku .... Każda wiadomość zostanie wyświetlona, ​​gdy proces zakończy się.

@ 2: ty kodowane stronie klienta, aby wyłączyć przycisk, nie ma kodu do ponownym włączeniu przycisku

HTH

5

Właśnie znalazłem rozwiązanie na MSDN (http://msdn.microsoft.com/en-us/library/bb386518.aspx) Dodano trochę kodu i usunięcia niektórych. zbędnych części.

<%@ Page Language="C#" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 
protected void btnDoWork_Click(object sender, EventArgs e) 
{ 
    /// do something long lasting 
    System.Threading.Thread.Sleep(3000); 
} 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" /> 

    <script language="javascript" type="text/javascript"> 
    <!-- 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_initializeRequest(InitializeRequest); 
    prm.add_endRequest(EndRequest); 
    var postBackElement; 
    function InitializeRequest(sender, args) { 
     if (prm.get_isInAsyncPostBack()) { 
      args.set_cancel(true); 
     } 
     postBackElement = args.get_postBackElement(); 
     if (postBackElement.id == 'btnDoWork') { 
      $get('btnDoWork').value = 'Working ...'; 
      $get('btnDoWork').disabled = true; 
     } 
    } 
    function EndRequest(sender, args) { 
     if (postBackElement.id == 'btnDoWork') { 
      $get('btnDoWork').value = 'Done!'; 
      $get('btnDoWork').disabled = false; 
     } 
    } 
    // --> 
    </script> 

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Label ID="Label1" runat="server" Text="Hello World!"></asp:Label><br /> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="btnDoWork" /> 
     </Triggers> 
    </asp:UpdatePanel> 
    <asp:Button ID="btnDoWork" runat="server" Text="Start!" OnClick="btnDoWork_Click" /> 
</div> 
</form> 
</body> 
</html> 

Co można w zasadzie zrobić, to zarejestrować się trochę eventhandler dla Initialize_ i End_Request - w tych, których wyłączasz i włączasz przycisk!

HTH

+0

Dziękuję, proszę pana, właśnie tego chciałem. – rht341

+0

możesz rozważyć oznaczenie tego pytania jako odpowiadającego - z wyprzedzeniem: D –

Powiązane problemy