Простой чат приложение сигнал г - PullRequest
2 голосов
/ 02 апреля 2012

Я пытаюсь изменить приложение для чата в учебных целях.Единственным изменением, которое я сделал, было изменение кнопки на серверный элемент управления.У меня проблема в том, что в первый раз, когда я передаю сообщение, оно работает, и вызывается 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), за первый щелчок я получаю 'send' (signalR) и Client1.aspx и всеработает нормально, для второго клика вперед, я получаю только Client1.aspx, и не отправлять вообще: /

1 Ответ

2 голосов
/ 02 апреля 2012

для быстрого и грязного решения, просто поместите панель обновления ТОЛЬКО вокруг кнопки и удалите

$("#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:)

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