我正在尝试修改一个简单的聊天应用程序以用于学习目的。我做的唯一改变是将按钮更改为服务器端控件。我遇到的问题是,我第一次广播消息,它的工作原理,并调用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,并且不发送任何内容:/
答案 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:)