我有一个问题,我必须停止一个按钮单击加载类。我已经检查了一些与此相关的论坛。但没有找到确切的解决方案。如何在点击按钮时停止加载功能?
例如:
Public Sub LoadDropDown()
Dim it As Integer
For it = 0 To 1000000
DropDownList1.Items.Add(it)
Next
End Sub
我要加载的Load按钮单击下拉,我必须取消对取消按钮的点击。
我有一个问题,我必须停止一个按钮单击加载类。我已经检查了一些与此相关的论坛。但没有找到确切的解决方案。如何在点击按钮时停止加载功能?
例如:
Public Sub LoadDropDown()
Dim it As Integer
For it = 0 To 1000000
DropDownList1.Items.Add(it)
Next
End Sub
我要加载的Load按钮单击下拉,我必须取消对取消按钮的点击。
由于填充控件发生在服务器上,我无法想象如何从客户端中断您的方法。整个控件正在填充,渲染,然后才发送给客户端。您可能会使用ajax中断回调,但是控件根本不会返回。
另一种方法是用ajax加载块,并将它们附加到客户端的控件上。
我刚刚举了一个例子,如果加载一个网格视图与沉重的数据,那么用户如何取消?我尝试了Ajax更新面板,它的工作良好,它会停止加载,但服务器端功能将在后台工作,我怎么能阻止呢? – Rajsmethode
一旦运行,您就不能停止服务器端处理。不幸的是,这是网络的异步性质。或者至少你必须编写大量的基础设施来模拟状态,以便'取消'请求可以映射到仍在后台某处运行的特定进程。 –
是的,它是必需的。一些加载函数用户应该有一个选项来取消,否则他不得不等待完成加载,即使他不想要。这就是我试图阻止这个过程的任何可能性的原因。感谢您的建议。 – Rajsmethode
有没有正式的方法来做你所要求的,但如果你重构你的代码,你应该能够达到相同的结果。如果某些用户不能加载某些内容,请在代码中执行该逻辑,然后再呈现给页面。
根据您回应其他答案...
你可以考虑做多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")
...
在某些时候,用户单击cancel,将“false”指定给会话(“continue”)。下一次你的循环检查会话(“继续”),它会看到它是错误的并退出。
这会给你一个部分加载的数据控件。您可能需要其他代码来清除部分更新。
但是我怎样才能改变会话继续为假?如果我在取消按钮事件中写入编码,它应该在完成加载按钮之后才被触发,因为我可以执行该编程。我如何从客户端更改会话价值? – Rajsmethode
嗯,我认为可以通过脚本管理器和web方法,但不必使用会话 - 可以是任何在页面上保存值的任何内容。例如,你可以使用JavaScript取消按钮,使它在你的DOM中设置一个值(如隐藏字段的文本值等) – Chains
我试过你的方法它的工作,但仍然有问题,如果我使用存储过程或sql查询,我认为我们不能像这样停下来,在那种情况下我能做什么?请指教我 – Rajsmethode
我想你可以用会话变量来完成这个任务。原谅我,但我将不得不在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;
}
这里的想法是,inital循环检查一个Session变量,看它是否应该继续或跳出循环。如果页面上有一个按钮允许用户将此Session变量设置为“true”,则它们可以与初始请求进行基本通信并使其跳出循环。我不确定这是否能够完全实现您期望实现的目标,但希望它有所帮助。
感谢@Waqas格式化OP的代码示例 –
@Rajsmethode:我希望你不会认真考虑构建这么多DropDownList项目?!你知道这也必须发送到客户端并从浏览器呈现吗? –
是的,我知道,我只是给出了一个例子作为下拉列表,我有模拟器问题,用户想取消加载gridview。我用javascript abortPostBack()方法完成了ajax更新面板。但它会停止回发,并且服务器端代码将继续工作到事件完成。你能给我任何想法吗? – Rajsmethode