刷新更新面板如果用户当时正在写入,我会遇到问题

发布于 2024-10-01 09:11:11 字数 210 浏览 5 评论 0原文

我正在尝试使用 ajax 控制工具包进行网络聊天。有一个脚本管理器、更新面板和计时器。

我插入了文本框来显示用户引入的每条文本,用于书写的文本和发送按钮都已消失。它工作得很好,但如果我在刷新时间的确切时刻写一些文本(绞车发生很多,因为它每 3 秒一次),它不会让我正确书写,导致文本框闪烁,你会错过一个字母。因此,这是在不损失写作流畅性的情况下执行此操作的正确方法。

谢谢。

Im trying to make a web chat using ajax control tool kit. There is a script mannager, the update panel and the timer.

I inserted the textbox for showing every text that is introduced by the users, the text for writing and the send button are out. It works great but if im writing some text in the exact moment of refreshing time (winch happends a lot because its every 3 sec) it does not let me write correctly cause the textbox kind of blink and you miss a letter. So, wich is the correct method for doing this without lossing the fluidity of the writing.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷…雨湿花 2024-10-08 09:11:11

我建议您创建 2 个文本框:一个用于输入,另一个用于输出。用于输入的应该放置在更新面板之外,因此它永远不会被刷新。此外,您还需要添加此文本框或其发送按钮作为更新面板的触发器。与此类似 示例

这是我尝试过的代码,它有效:

Aspx:

        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
        <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="2000" Enabled="True">
        </asp:Timer>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" Text="Submit" runat="server" OnClick="Button1_Clicked" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
                <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
            </Triggers>
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="" />
            </ContentTemplate>
        </asp:UpdatePanel>

和 C#:

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        Label1.Text = DateTime.Now.ToString();
    }

    protected void Button1_Clicked(object sender, EventArgs e)
    {
            Label1.Text = String.Format("{0}: {1}", DateTime.Now.ToString(), TextBox1.Text);
    }

I would suggest you to create 2 textboxes: one for input and anther for output. The one for input should be placed outside the update panel, so it never will be refreshed. Also you will need to add this textbox or its send button as a trigger to your update panel. Similar to this example

Here is the code I tried and it works:

Aspx:

        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
        <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Interval="2000" Enabled="True">
        </asp:Timer>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" Text="Submit" runat="server" OnClick="Button1_Clicked" />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
                <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
            </Triggers>
            <ContentTemplate>
                <asp:Label ID="Label1" runat="server" Text="" />
            </ContentTemplate>
        </asp:UpdatePanel>

And C#:

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        Label1.Text = DateTime.Now.ToString();
    }

    protected void Button1_Clicked(object sender, EventArgs e)
    {
            Label1.Text = String.Format("{0}: {1}", DateTime.Now.ToString(), TextBox1.Text);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文