简单的聊天应用信号r

时间:2012-04-02 09:16:57

标签: c# asp.net signalr

我正在尝试修改一个简单的聊天应用程序以用于学习目的。我做的唯一改变是将按钮更改为服务器端控件。我遇到的问题是,我第一次广播消息,它的工作原理,并调用Clients.addNotification(msg)。然而第二次,虽然javascript工作,但在最后一步,javascript撤消了所有的更改,并且从未调用过Clients.addNotification(..):/它只适用于第一次!我必须重建我的项目才能看到它再次工作(页面刷新不起作用)

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

我的aspx页面:

    <%@ 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>

我的代码背后:

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);

        }
    }

一旦这个示例工作,我将把代码转移到我正在处理的另一个应用程序,以便可以立即将通知推送给所有客户端。

我是一个非常初学者,我将非常感谢你的帮助!非常感谢你们!

编辑:

签出网络标签(在我的Chrome上),第一次点击我得到'发送'(signalR)和Client1.aspx,一切正常,第二次点击,我只得到Client1.aspx,并且不发送任何内容:/

1 个答案:

答案 0 :(得分:2)

快速而肮脏的解决方案,只需将更新面板放在按钮周围,然后移除

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

而是在开头插入以下内容

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

感谢我的朋友shifty和red_square:)