2012-04-02 4 views
2

Ich versuche, eine einfache Chat-Anwendung zu Lernzwecken zu ändern. Die einzige Änderung, die ich machte, war, eine Schaltfläche zu einem serverseitigen Steuerelement zu ändern. Das Problem, das ich habe, ist, dass das erste Mal, dass ich eine Nachricht ausstrahle, es funktioniert, und die Clients.addNotification (msg) aufgerufen wird. Aber das zweite Mal, obwohl das Javascript funktioniert, im letzten Schritt, das Javascript macht alle Änderungen rückgängig und die Clients.addNotification (..) wird nie aufgerufen:/Es funktioniert nur zum ersten Mal! Ich muss mein Projekt neu erstellen, um zu sehen, wieder zu arbeiten (eine Aktualisierung der Seite wird nicht funktionieren)Einfaches Chat-Anwendungssignal r

public class Chat : Hub 
{ 
    public void Send(string message) 
    { 
     // Call the addMessage method on all clients 
     Clients.addNotification(message); 
    } 
} 

Meine aspx Seite:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Client1.aspx.cs" Inherits="WebApplication1.WorkingWithHubs.Client1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script src="../Scripts/jquery-1.6.4.js" type="text/javascript"></script> 
    <script src="../Scripts/jquery.signalR.min.js" type="text/javascript"></script> 
    <script src="/signalr/hubs" type="text/javascript"></script> 
    <script type="text/javascript"> 
      $(function() { 
      // Proxy created on the fly 
      var chat = $.connection.chat; 

      // Declare a function on the chat hub so the server can invoke it 
      chat.addNotification = function (message) { 
       $('#messages').append('<li>' + message + '</li>'); 

       var labelValue = $('#total').val(); 
       $('#total').val(parseInt(labelValue, 10) + 1); 

      }; 

      $("#btn").click(function() { 
       // Call the chat method on the server 
       chat.send($('#msg').val()); 
      }); 

      // Start the connection 
      $.connection.hub.start(); 
     }); 
    </script> 
</head> 
<body> 

    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="scriptManager" runat="server" /> 
    <div> 
     <asp:UpdatePanel ID="updatePanel" runat="server"> 
      <ContentTemplate> 
       <input type="text" id="msg" runat="server" /> 
       <asp:Button ID="btn" runat="server" Text="BroadCast" OnClick="btn_click" ClientIDMode="static" /> 
       <input type="text" id="total" value="0" /> 
       <ul id="messages"> 
       </ul> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
    </form> 
</body> 
</html> 

Mein Code hinter:

public partial class Client1 : System.Web.UI.Page 
    { 
     public List<String> list = new List<String>(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void btn_click(object sender, EventArgs e) 
     { 
      list.Add(msg.Value); 

     } 
    } 

Einmal In diesem Beispiel werde ich den Code in eine andere Anwendung verschieben, an der ich arbeite, damit Benachrichtigungen sofort an alle Clients gesendet werden können.

Ich bin ein sehr Anfänger und ich würde alle Ihre Hilfe zu schätzen wissen! Vielen Dank, Jungs!

EDIT:

, wenn der Netzwerk-Registerkarte Check-out (auf meinem Chrom), für den ersten Klick ich eine ‚Senden‘ erhalten (signalR) und Client1.aspx und alles funktioniert gut, zum zweiten Klick weiter, ich bekomme nur Client1.aspx und keine gesandten:/

Antwort

2

für eine schnelle und schmutzige Lösung, sondern wird einfach das Update-Panel nUR um den Knopf und entfernen

$("#btn").click(function() { 
      // Call the chat method on the server 
      chat.send($('#msg').val()); 
     }); 

und stattdessen legen Sie die folgenden in der Anfang

$('#form1').delegate('#btn', 'click', function() { 
      chat.send($('#msg').val()); 
     }); 

Dank meiner Freunde unsteten und Red_Square :)

+1

Kein Problem @Test :) – redsquare