我有一个带有简单标签的ASP.NET webform。我可以在页面加载时更改标签的可见性和文本,或者在没有问题的情况下按下按钮/事件。
但是,当我在SignalR事件上调用returnMessage()时,该方法会完全运行,但页面不会使用新文本进行更新。
private void returnMessage(string message)
{
lblError.Visible = true;
lblError.Text = message;
}
以下是SignalR调用该方法的方法:
HubProxyRegister.On<string>("UserAccountReturnMessage", (message) =>
{ returnMessage(message); });
这是带有标签的空白页面:
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblError" runat="server" Text="Error:" Visible="False"></asp:Label>
</div>
</form>
</body>
我是否需要调用某种回发来显示更新的标签文本,因为Signalr正在调用returnMessage()而不是用户事件?
正如petryouno1所写,你需要在客户端上使用一些javascript!客户端可以在服务器上使用signalr执行方法,signalr需要在服务器和客户端之间建立连接。
你需要两个部分:
服务器部分:
你需要一个中心。你可以想象这就像一个端点。在集线器内部,您可以定义客户端可以在服务器上调用的方法。除此之外,我建议您使用通用类型的集线器。作为类型参数,您可以设置一个接口,在该接口中定义可以从服务器上的客户端执行的方法。
小例子:
public class YourHubName : Hub<IClient>
{
public void MethodCanBeCalledFromClient(string message)
{
Clients.All.MethodCanBeCalledFromServer(message);
}
}
public interface IClient
{
void MethodCanBeCalledFromServer(string message);
}
客户份额:
<script src="Scripts/jquery.1.7.1.min.js"></script>
<script src="Scripts/jquery.signalR-1.0.0-rc1.min.js"></script>
<script src="/signalr/hubs" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
var yourHub = $.connection.yourHubName; // <-- This establishes a connection to server.
yourHub.client.methodCalledFromServer = function(msg) {
// Here you have to grap which jquery your DOM, and change it
};
$.connection.hub.start();
// After the connection is established you can also send messages
// from client to server (without postback) like:
// yourHub.server.MethodCanBeCalledFromClient(/*String which you can take for example out of your DOM*/));
});
</script>
不要忘记:
我建议你阅读:Can SignalR be used with asp.net WebForms?
对于信号器基础知识,请阅读:https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client