如何在按钮单击时停止加载功能?

时间:2011-08-19 10:01:37

标签: asp.net vb.net asp.net-ajax

我遇到问题,我必须在点击按钮时停止一个Loading类。我已经检查了一些与此相关的论坛。但没有找到确切的解决方案。

例如:

Public Sub LoadDropDown()
   Dim it As Integer
   For it = 0 To 1000000
      DropDownList1.Items.Add(it)
   Next
End Sub

我必须在加载按钮上加载DropDown按钮,我必须在取消按钮点击时取消它。

4 个答案:

答案 0 :(得分:0)

由于在服务器上填充控件,我无法想象从客户端中断您的方法。整个控件正在填充,呈现,然后才会发送到客户端。您可以使用ajax中断回调,但之后根本不会返回控件。

另一种方法是使用ajax将内容加载到块中,然后将它们附加到客户端的控件上。

答案 1 :(得分:0)

没有正式的方法可以做你所要求的,但是如果你重构你的代码,你应该能够达到相同的结果。如果不应为某些用户加载某些内容,请在代码中将该逻辑添加到页面之前。

答案 2 :(得分:0)

根据你对其他答案的回应......

您可以考虑在计时器上执行多个my_ddl.items.add()调用。将涉及多个单独的回发/ ajax调用。例如:

1) add records for 2 seconds (instead of a fixed number of records at a time)
2) check for session("continue") = "true"
3) add more records for 2 more seconds
4) check session("continue")
...

在某些时候,用户点击取消,这会为会话分配“假”(“继续”)。下次你的循环检查会话(“继续”)时,它会看到它是假的并退出。

这将为您提供部分加载的数据控件。您可能希望其他代码消除部分更新。

答案 3 :(得分:0)

我认为您可以使用会话变量来完成此任务。请原谅我,但我必须在C#中提供示例,但我相信你可以对此有所了解。

   private bool CancelRequested
        {
            get
            {
                if (Session["CancelRequested"] == null)
                    return false;
                else
                    return (bool)Session["CancelRequested"];
            }
            set
            {
                Session["CancelRequested"] = value;
            }
        }

        public void LoadDropDown()
        {
            for (int it = 0; it <= 1000000; it++)
            {
                if (CancelRequested)
                {
                    CancelRequested = false;
                    break;
                }                    
                //Your logic here
            }
        }

        protected void btnCancelRequest_Click(object sender, EventArgs e)
        {
            CancelRequested = true;
        }

这里的想法是,初始循环检查一个Session变量,看它是否应该继续或突破循环。如果页面上有一个允许用户将此Session变量设置为“true”的按钮,则它们可以与初始请求进行必要的通信并使其脱离循环。我不确定这是否能完全实现你想要实现的目标,但希望它有所帮助。