我有一個問題,我必須停止一個按鈕單擊加載類。我已經檢查了一些與此相關的論壇。但沒有找到確切的解決方案。如何在點擊按鈕時停止加載功能?
例如:
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