我遇到问题,我必须在点击按钮时停止一个Loading类。我已经检查了一些与此相关的论坛。但没有找到确切的解决方案。
例如:
Public Sub LoadDropDown()
Dim it As Integer
For it = 0 To 1000000
DropDownList1.Items.Add(it)
Next
End Sub
我必须在加载按钮上加载DropDown按钮,我必须在取消按钮点击时取消它。
答案 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”的按钮,则它们可以与初始请求进行必要的通信并使其脱离循环。我不确定这是否能完全实现你想要实现的目标,但希望它有所帮助。