在 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 會出現在網頁上。
[ 參考資料 ]

留言

這個網誌中的熱門文章

新三國志英傑傳修改器 Ver 1.0 繁體中文版

ACCESS 資料庫在 Web.config 中使用相對路徑