2013-05-15 17 views
1

在我目前的項目中,我有一個工作流程,需要向用戶顯示兩個連續的MessageBoxes。第一個更像是一個警告,告訴用戶他嘗試執行操作的風險。我使用的是鏈接按鈕的ClientClickEvent讓用戶確認操作:WebForm_OnSubmit如何定義?

<asp:LinkButton runat="server" id="lockorder" 
    CommandName='LockOrder' 
    OnClientClick="return confirm('Do you really want to lock this order?');" /> 

如果用戶確認,他是一定要執行的操作,應用程序執行從代碼中一些驗證的後面。結果可能是,有一些未處理的任務。這是有效的,但用戶應該瞭解它,有可能完成這些任務。所以我表現出第二個確認對話框,但是從後面的代碼此時:

if (tasksOpen) 
{ 
    ScriptManager.RegisterClientScriptBlock(
     this.Page, 
     typeof(Page), 
     "Onload", 
     "var confirmationResult = window.confirm('There are some open tasks left, which might get closed. Do you really want to lock this order?'); if (confirmationResult) __doPostBack('ConfirmLockOrder', confirmationResult);", 
     true); 
    return; 
} 

對於這裏更好的可讀性是JS-片斷得到的交給客戶端:在代碼

var confirmationResult 
    = window.confirm('There are some open tasks left, which might get closed. Do you really want to lock this order?'); 

if (confirmationResult) 
    __doPostBack('ConfirmLockOrder', confirmationResult); 

返回再次落後我收到此命令(例如在Page_Load事件中)並繼續進行實際操作。一切正常,但我做了一些改變,停止執行回發。

我看了一下使用FireBug的客戶端腳本。 __doPostBack功能(顯然是自動生成的)告訴我沒有定義WebForm_OnSubmit。我認爲它沒有定義,因爲在OnLoad -event中顯示確認對話框get,因此在窗體實際加載之前。但爲什麼__doPostBack-功能甚至需要檢查這個事件是否執行,如果沒有定義?我可以自定義__doPostBack - 這樣做嗎?或者我應該選擇另一個事件?還是我完全錯了?

我希望有人能指引我進入正確的方向!

+0

在您的JavaScript中的其他地方出現錯誤可能會產生像您上面遇到的錯誤。我會先檢查一下。找到問題可能很煩人。 –

+0

沒有其他的JavaScript錯誤發生......我試圖避免幾乎無處不在的JavaScript,因爲我不是那麼熟悉它...... – Carsten

+0

好吧,有可能您的代碼在加載其他所有內容之前運行。我不確定ScriptManager注入代碼的時間。然而,你可以改變你的JavaScript如下所示:window.onload = function(){[your code here]};如果你使用jQuery,那麼.ready方法將是最好的。 –

回答

2

根據錯誤(以及一些受過教育的猜測),您正在通過ScriptManager註冊的JavaScript代碼在加載由ASP.NET生成的其餘JavaScript代碼之前發射。因此,WebForm_OnLoad未定義。

您需要確保網頁在您的代碼執行之前完全加載。你的代碼更改爲以下:

window.onload=function(){ 
    var confirmationResult = window.confirm('There are some open tasks left, ' 
     + 'which might get closed. Do you really want to lock this order?'); 

    if (confirmationResult) 
     __doPostBack('ConfirmLockOrder', confirmationResult); 
} 

* 我打破了確認串一分爲二,只是爲了顯示目的。

如果您使用jQuery,$(document).ready優於window.onload