[英]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.