【问题标题】:Change textbox value from event handler for object in codebehind page从事件处理程序更改代码隐藏页面中对象的文本框值
【发布时间】:2013-06-03 19:48:56
【问题描述】:

我有一个对象,我们称它为 objK,它有一个接受字符串的事件 Message。我在页面后面的代码中有一个事件处理程序,称为 HandleObjKMessage(string s)。该方法目前看起来像这样:

void HandleObjKMessage(string s)
    {
        TextBox1.ReadOnly = false;
        TextBox1.Text += s+ Environment.NewLine;
        UpdateP.Update();

    }

objK 是来自外部 .dll(程序集)的对象,它正在运行我需要阻止用户更新的迭代过程。这就是使用事件的目的。

我是不是找错树了?我通常是一个winforms的人,这让我很沮丧。

谢谢。

【问题讨论】:

    标签: asp.net textbox updatepanel


    【解决方案1】:

    我可能误解了你,但是你有一个你实例化的对象,然后给这个对象的事件添加一个事件处理程序,当事件触发时你希望用户得到更新的数据?

    如果是这样,那是不可能的。这仅仅是因为网络没有状态。服务器和客户端之间没有持久连接。

    当收到对您的页面的请求时,服务器将创建您的页面类的实例,并运行整个生命周期(初始化、加载等)。一旦将页面呈现为 HTML 标记,服务器就会处理页面的实例,以及您附加的事件处理程序。

    您可以在MSDN 阅读有关 WebForms 页面生命周期的更多信息

    如果你真的想一路走下去,真正将通知推送给你的用户,你可以使用SignalR,但这会增加一些复杂性。

    【讨论】:

    • 你已经回答了我的问题。我假设这是这种情况,尽管我仍在学习关于 asp 页面的“状态”。我不明白的是:我可以单步执行后面的代码,并看到每次都命中了事件处理程序。这让我很困惑,为什么它会这样做但不通过 AJAX 更新 html 页面。我会跟进您发送的链接。谢谢。
    • 我想添加一个额外的问题/评论:在我的 onClick 事件中,我当然可以更新文本框,但我假设使用 UpdatePanel 会进行异步调用以更新 HTML客户。
    • 真的吗?事件处理程序仍然注册?这似乎很奇怪。也许该页面尚未处理。无论如何,它不通过 AJAX 更新的原因是因为 HTTP 不是全双工协议。客户端可以向服务器发出请求,服务器可以响应这些请求,仅此而已。如果你愿意,你可以有一个客户端 javascript,每 x 秒异步轮询一次服务器以查看数据是否已更改。无论如何,所有这些轮询和 SignalR 推送技术都需要您对生命周期有一个很好的了解
    • 是的,HandleObjKMessage(string s) 正在与外部进程同步命中(信息正确)。这只是页面没有取消更新。我现在正在更彻底地阅读这些东西(我早就应该这样做了)
    • HandleObjKMessage 被命中的事实实际上令人担忧,因为这可能意味着垃圾收集器无法收集您页面的实例。可能是因为您的页面类的每个实例都在监听一个静态可用的事件。这是经典的event memory leak。问题在于,由于 Web 完全是来自客户端的请求-响应,因此推送数据的事件模型根本行不通
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多