gpt4 book ai didi

c# - ASP.NET 在另一个客户端上更新 UpdatePanel

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:31 25 4
gpt4 key购买 nike

好的。所以基本上我正在网页上的消息系统上工作。我网页上的用户可以互相发送消息,但现在我希望消息在发送时在接收者屏幕上“弹出”。就像当 Facebook 上的某人在您在线时向您发送消息时,消息内容变为红色。为了解决我的问题,我需要每个客户都知道目前还有哪些其他客户在线。我通过在我的 Global.asax 中编写一个类似观察者的模式来解决这个问题:

    public static void AddObserver(Observer o)
{
if(!observers.Contains(o))
observers.Add(o);

System.Diagnostics.Debug.WriteLine("Observer tilføjet : " + observers.Count);
}

public static void RemoveObserver(Observer o)
{
if (observers.Contains(o))
observers.Remove(o);

System.Diagnostics.Debug.WriteLine("Observer fjernet : " + observers.Count);
}

public static void NotifyObserversNewMail(Observer observer)
{
foreach (Observer o in observers)
if(!o.Equals(observer))
o.UpdateNewMail();
}

在这种情况下,观察者我只是 Site.Master,我已经扩展了观察者类:

public partial class SiteMaster : System.Web.UI.MasterPage, Observer
{
protected void Page_Unload(object sender, EventArgs e)
{
Session["observer"] = this;
Global.AddObserver(this);
}

protected void Page_Load(object sender, EventArgs e)
{
//ADD OBSERVER TO GLOBAL.ASAX
if (Session["observer"] != null)
Global.RemoveObserver((Observer)Session["observer"]);

public void Update()
{
DLMessages.DataSource = ServiceMessages.GetInstance().GetMessages();
DLMessages.DataBind();

UPMessages.Update();
}

其中 DLMessages 是 UpdatePanel UPMessages 中的一个 DataList。

因此我们有一个“发送方”客户端和一个“接收方”客户端。当发件人创建新消息时,将调用此方法:

    protected void MessageSend(object source, EventArgs args)
{
Page.Validate("ValGroupMessageTo");
if (Page.IsValid)
{
ServiceMessages.GetInstance().SendMessage(ServiceCommunity.GetInstance().GetUser(MessageTo.Text).Id, ((User)Session["user"]).Id, MessageMessage.Text);

Global.NotifyObserversNewMail((Observer)Session["observer"]);

ClosePopups(new object(), new EventArgs());

Update();
}
}

您可能会注意到,它在 global.asax 上调用 Notify,并直接在自身上调用 update()。 “发送方”端的 UpdatePanel 更新完美,但接收方没有任何反应。反正不在 UpdatePanel 中。因为如果我更改 Update() 中的代码以运行来自数据库的消息,我可以看到该消息被正常调用,并且新消息已加载。只是没有更新到UpdatePanel。所以我一直在思考为什么更新面板在数据更新时没有在“接收方”端更新,我的结论是因为“接收方”端没有部分回发。是的,可以调用 Update() 方法,但没有回传。所以我的问题是:是否可以从代码隐藏中“强制”部分回发?或者还有其他可能效果更好的解决方案吗?

希望它有意义:-)

最佳答案

帮自己一个忙,使用 SignalR 构建整个东西.它是用于 .NET 的服务器和浏览器之间实时通信的库(包括客户端库)。

如果你坚持用困难的方式来做,你应该使用 timer触发更新面板更新

关于c# - ASP.NET 在另一个客户端上更新 UpdatePanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7105175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com