2

我正在.NET 平台上设计小型即时通讯应用程序。

我有一个ListBox,TextBoxButton(称为发送)。
当用户点击send button时,Text of TextBox将出现,ListBox但用户不应 3 messages在 1 分钟内发送(消息限制),并且他/她的消息大小应包含最少 20 个最多 140 个字符串。

我怎样才能做到这一点?

4

2 回答 2

1

下面的示例使用计时器控件,如果您想了解有关在 ASP.NET 中使用计时器的更多信息,请查看 Joe Stagner 的视频教程。

基本上,我将消息的数量存储在 ViewState 中,当该数量达到3时,我启动计时器,该计时器将ViewState["Messages"]在 1 分钟(60 000 毫秒)后将其重置为 0,并且用户再次能够发送更多消息。

ASPX:

    <asp:ScriptManager ID="Scriptmanager" runat="server" />
    <asp:Timer ID="timer" runat="server" Enabled="false" Interval="60000" OnTick="Tick" />
    <asp:UpdatePanel ID="updatePanel" runat="server">
        <ContentTemplate>
            <asp:TextBox MaxLength="140" ID="txtMessage" runat="server" />&nbsp;
            <asp:Button ID="btnSend" runat="server" Text="Send" OnClick="Send" />&nbsp; <span
                id="error" runat="server" style="color: Red;" />
            <br />
            <asp:ListBox ID="lbMessages" runat="server" Width="240" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="timer" />
        </Triggers>
    </asp:UpdatePanel>

后面的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
        ViewState["Messages"] = 0;
}

public void Send(object sender, EventArgs e)
{
    error.InnerHtml = string.Empty;
    string message = txtMessage.Text;

    if (message.Length < 20)
    {
        error.InnerHtml = "The message should be at least 20 characters long";
        return;
    }

    int messageNumber = (int)ViewState["Messages"];
    if (messageNumber < 3)
    {
        lbMessages.Items.Add(message);
        ViewState["Messages"] = ++messageNumber;

        if (messageNumber.Equals(3))
            timer.Enabled = true;
    }
}

protected void Tick(object sender, EventArgs e)
{
    ViewState["Messages"] = 0;
    timer.Enabled = false;
}

此外,您不需要检查代码中的最大长度,文本框上有一个属性 -MaxLength

于 2013-02-02T14:31:26.797 回答
0

也许您可以在页面加载中设置一个隐藏字段来存储序列化的三个最后请求时间和另一个用于最后一分钟的消息计数。

在单击按钮事件中获取文本框的文本应用您的大小限制并验证消息计数。

于 2013-02-02T10:33:39.977 回答