2011-04-28 50 views
1

我正在研究一個asp.net應用程序。有很多使用的UpdatePanels。是否有任何「最佳實踐」的方式來設置一些js腳本執行updatePanel刷新後執行。 (重要的是:js腳本不是靜態的 - 例如,我正在處理服務器端代碼中的異常,並且我需要在updatePanel刷新後讓用戶意識到此異常,例如)設置js在ASP.NET應用程序中從服務器執行

當前我正在使用以下解決方案:

<asp:Hidden id="scriptsHiddenField" runat="server" /> 

在服務器端我傳遞腳本這樣的:

catch (Exception exception) { 
    scriptsHiddenField.Value += String.Format("alert('Oops! Error occured: {0}');", exception.Message); 
} 

而且我在下面的方式評估對endRequest事件腳本:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

function endRequestHandler(sender, args) { 
    eval($('#<%= scriptsHiddenField.ClientID %>').val()); 
    $('#<%= scriptsHiddenField.ClientID %>').val(''); 
} 

這只是一個sipmlified的例子,所以基本上它不僅是錯誤處理,它必須像這樣工作。通常從服務器傳遞的腳本更加複雜,所以我對評估js的方式感覺不好。

回答

1

我們一直在做類似的事情。這是一個在更新面板刷新時調用javascript警報的函數。

public static void ShowInUpdatePanel(string message, UpdatePanel up) 
{ 
    //Cleans the message to allow single quotation marks 
    string cleanMessage = message.Replace("'", "\\'"); 
    string script = "<script type='text/javascript'>alert('" + cleanMessage + "');</script>"; 
    ScriptManager.RegisterStartupScript(up, up.GetType(), "alert" + DateTime.Now.Millisecond.ToString(), script, false); 

} 
1
ScriptManager.RegisterStartupScript(this, GetType(), "somenameyouwanttouse", "alert('xyz');", true); 

編輯:最後一個參數定義是否要自動發出SCRIPT標籤。在我最初的回答中忘記了。

此外,ClientScript.RegisterStartupScript是相似的,但不會在每個異步回發(只有第一個)後運行,如果我沒有弄錯的話。

+0

我已經嘗試過了 - 問題是在異步updatePanel刷新後它不能正常工作,這經常使用。 – danyloid 2011-04-28 16:22:13

+0

也許我在我的答案中反轉了ClientScript與ScriptManager,但它確實有效。我們一直這樣做。 – 2011-04-28 16:24:54

+0

您的ToolkitScriptManager是在UpdatePanel中還是外部? – 2011-04-28 16:26:58

1

您是否嘗試過註冊啓動腳本以便在更新後運行?

catch (Exception exception) 
{ 
     ScriptManager.RegisterStartupScript(this, this.Page.GetType(), "errkey", "alert('Oops! Error occured: " + exception.Message + "');", true); 
} 
相關問題