網頁

在 ASP.NET 也能使用 MessageBox 彈出對話方塊的功能

[ 前言 ]
當我們在寫 Windows Form 的時候可能會用到 MessageBox 的功能,但是在 ASP.NET 上雖然還是可以使用,但是真正把網站透過 IIS 執行之後會發現無法使用,出現如下的警告訊息。

當應用程式不使用 UserInteractive 模式執行時,顯示強制回應對話方塊或表單不是有效的作業。指定 ServiceNotification 或 DefaultDesktopOnly 樣式以顯示來自服務應用程式的告知。

難道真的不能使用彈出式對話方塊了嗎? 當然是可以的,我們可以改成使用 Javascript 的 alert 方法來實現 MessageBox 的功能,以下有3種方法。

[ 使用 Response.Write ]
Response.Write("");
[ 使用 RegisterStartupScript ]
/// <summary>
/// 執行 Javascript 
/// </summary>
/// <param name="page">Page 頁面</param>
/// <param name="strJavascript">Javascript 指令</param>
/// <remarks></remarks> 
public static void ExecuteJavascript(Page page, string strJavascript)
{
    if (ScriptManager.GetCurrent(page) == null)
    {
        page.ClientScript.RegisterStartupScript(page.GetType(), strJavascript, strJavascript, true);
    }
    else
    {
        ScriptManager.RegisterStartupScript(page, page.GetType(), strJavascript, strJavascript, true);
    }
}
如果有使用 UpdatePanel 則改成如下程式碼。
/// <summary>
/// 使用 UpdatePanel 執行 Javascript 
/// </summary>
/// <param name="up">UpdatePanel 控制項</param>
/// <param name="strJavascript">Javascript 指令</param> 
/// <remarks></remarks>
public static void ExecuteJavascript(UpdatePanel up, string strJavascript)
{
    ScriptManager.RegisterStartupScript(up, up.GetType(), strJavascript, strJavascript, true);
}
[ 使用 RegisterClientScriptBlock ]
/// <summary>
/// 執行 Javascript 
/// </summary>
/// <param name="page">Page 頁面</param>
/// <param name="strJavascript">Javascript 指令</param>
/// <remarks></remarks> 
public static void ExecuteJavascript(Page page, string strJavascript)
{
    if (ScriptManager.GetCurrent(page) == null)
    {
        page.ClientScript.RegisterClientScriptBlock(page.GetType(), strJavascript, strJavascript, true);
    }
    else
    {
        ScriptManager.RegisterClientScriptBlock(page, page.GetType(), strJavascript, strJavascript, true);
    }
}
如果有使用 UpdatePanel 則改成如下程式碼。
/// <summary>
/// 使用 UpdatePanel 執行 Javascript 
/// </summary>
/// <param name="up">UpdatePanel 控制項</param>
/// <param name="strJavascript">Javascript 指令</param> 
/// <remarks></remarks>
public static void ExecuteJavascript(UpdatePanel up, string strJavascript)
{
    ScriptManager.RegisterClientScriptBlock(up, up.GetType(), strJavascript, strJavascript, true);
}
[ RegisterStartupScript 與 RegisterClientScriptBlock 的差別]
RegisterStartupScript 會把 JavaScript 函式會直接出現在 HTML 指令碼的 </form> 項目結尾之前。

RegisterClientScriptBlock 會把 JavaScript 函式會直接出現在 HTML 指令碼的 <form> 項目開頭之後。
[注意事項]
網頁上所有的 JavaScripts 都必須有唯一的鍵值 key,若有一個以上相同的 key 則只有第一個 Javascript 會出現在網頁上。
[ 參考資料 ]

沒有留言:

張貼留言

1. 文章如有錯誤,歡迎指正。
2. 請勿打廣告,違者一律刪。
3. 歡迎您提供寶貴的意見。