首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

DevExpress ASPxGridView CustomButtonCallback 彈窗提示解決方案:JSProperties 模式

     編輯:ASP.NET 基礎

問題背景

ASPxGridView.CustomButtonCallback 是異步回調事件,無法直接使用 Response.Write、ScriptManager.RegisterStartupScript 或 Page.ClientScript.RegisterClientScriptBlock 彈窗,因為回調響應不執行完整頁面生命週期。

官方推薦方案:拋出異常 + CallbackError (不推薦)

// 不推薦:異常用於控制流程,污染日志,性能差
protected void Grid_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
{
    throw new Exception("操作成功!");
}
protected void Grid_CallbackError(object sender, EventArgs e)
{
    // 前台 JS 判斷 e.message 彈窗
}

最佳實踐:JSProperties 傳遞消息到客戶端

後台代碼

protected void ASPxGridView1_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
{
    var grid = sender as ASPxGridView;
    if (e.ButtonID == "btnAudit")
    {
        int id = Convert.ToInt32(grid.GetRowValues(e.VisibleIndex, "ID"));
        bool success = AuditOrder(id); // 業務邏輯

        // 關鍵:鍵名必須以 "cp" 開頭 (Client Property)
        grid.JSProperties["cpResult"] = success ? "success" : "failed";
        grid.JSProperties["cpMessage"] = success ? "審核成功!" : "該單據已審核,請勿重複操作。";
    }
}

前台 JS

function OnCustomButtonCallback(s, e) {
    // s = grid 客戶端對象
    if (s.cpResult) {
        if (s.cpResult === "success") {
            alert(s.cpMessage); // 或使用 DevExpress UI: DevExpress.ui.notify(s.cpMessage, "success", 3000);
        } else {
            alert(s.cpMessage); // 或 "error" 類型提示
        }
    }
}
// 綁定事件
// <ClientSideEvents CustomButtonCallback="OnCustomButtonCallback" />

關鍵規則

  • JSProperties 鍵名必須以 "cp" 開頭 (Case-insensitive),否則不會序列化到客戶端。
  • 值類型:基本類型、數組、對象 (自動 JSON 序列化)。
  • 每次回調前自動清空,需在事件中重新設置。
  • ASPxGridView.JSProperties 同理適用於 RowInserting、RowUpdating、BatchUpdate 等回調事件。

進階:統一封裝擴展方法

public static class GridViewExtensions
{
    public static void ShowMessage(this ASPxGridView grid, string message, string type = "info")
    {
        grid.JSProperties["cpToastMessage"] = message;
        grid.JSProperties["cpToastType"] = type; // success, error, warning, info
    }
}

// 使用
grid.ShowMessage("保存成功", "success");

總結

DevExpress 回調事件中彈窗/提示的標準模式是:後台設置 JSProperties["cpXxx"] → 前台 CustomButtonCallback / EndCallback 事件讀取 s.cpXxx 並調用 UI 組件顯示。拋棄異常控制流,擁抱屬性傳遞模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved