簡體   English   中英

使用JavaScript防止從GridView進行異步回發

[英]Prevent an asynchronous postback from gridview with javascript

我在更新面板中有一個gridview,在gridview的第一列中有一個復選框。 當我第一次創建它時,它運行良好。 復選框設置為AutoPostBack,並導致異步回發,在這里我可以處理數據並刷新gridview,而不會影響頁面的其余部分。

但是,我需要在頁面(客戶端)上測試某種條件,並向用戶顯示一個確認框,提示“此人未為此設置”。 你確定你要繼續嗎?'

最初,我是通過在gridview的RowDataBound事件中放入類似的代碼來完成此操作的;

CheckBox cb = (CheckBox)e.Row.FindControl("myCheckBox");
cb.Attributes.Add("onclick", "return check('" + ContactName + "');");

並具有以下JavaScript函數:

function check(ContactName)
{
  if (document.getElementById('Listed') == false)
  {
  if (confirm('This person is not listed, are you sure you want to continue?'))
    {
    return true;
    }
    return false;
  }
}

請忽略上面代碼中的錯別字,只要是從內存中鍵入就可以。 事實是,它有效。 如果我的局部變量Listed為false,則拋出確認框。

問題是,如果在確認框中選擇“確定”,則取消了由復選框生成的回發(它應該是異步的,因為它位於帶有ChildrenAsTriggers = true的更新面板中)。 我必須在javascript確認后調用__doPostback才能發生Postback。 但是,然后,我得到了完整的回發,而不是我想要的異步回發。

因此,我的問題是,如何通過帶有JavaScript確認的復選框阻止異步回發,因此,如果在javascript確認中選擇“確定”,則會發生異步回發。

正如我所說,目前,讓它起作用的唯一方法是在用戶單擊“確定”之后執行完整的回發。

此位置上的鏈接討論了如何通過JavaScript取消異步回發:

http://www.ajaxtutorials.com/ajax-tutorials/cancel-asynchronous-postback-in-c/

重要的部分在這里:

<script type="text/javascript">
var instance = Sys.WebForms.PageRequestManager.getInstance();
instance.add_initializeRequest(instance_initializeRequest);

function instance_initializeRequest(sender, args) {
    if (args.get_postBackElement().id == 'btn_Cancel') {
        instance.abortPostBack();
        alert('Postback has been cancelled. Time will not be updated.');
    }
}
</script>

駐軍Neely提供的方式應該適合您。

回發和異步回發之間的區別是異步只是在提交之前修改form的某些值,然后在提交后將其設置回去。 這些值指示哪個控件以什么樣的信息來發起請求,還提供用於將響應HTML呈現到哪個iframe的一些目標信息。 我只是在這里提出一些想法,在不同情況下,實現方式會有所不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM