Ext.NET / Ext Direct 架構下,JS 調用 C# [DirectMethod],需傳遞動態數組參數。
// 參數打包為數組,第二個參數傳 null 佔位 DirectEventArgs
var paramsArray = [value1, value2, value3]; // 動態構建
App.direct.YourMethod(paramsArray, null, function(result, e) {
if (e.status) {
console.log('成功:', result);
} else {
console.error('失敗:', e.error);
}
});
[DirectMethod]
public object YourMethod(object[] parameters, DirectEventArgs e)
{
// parameters 即為 JS 傳入的數組
// e 為 Ext Direct 事件參數(含用戶會話、請求信息等)
if (parameters == null || parameters.Length == 0)
return new { success = false, msg = "無參數" };
// 類型安全訪問
var param1 = parameters[0]?.ToString();
var param2 = Convert.ToInt32(parameters[1]);
// ...
return new { success = true, data = "處理結果" };
}
object[] 或 JArray:接收 JS 數組,Ext Direct 自動反序列化DirectEventArgs e:框架自動注入,JS 傳 null 佔位即可function(result, e),e.status 判斷成功,e.result 獲取返回值
// 定義 DTO
public class MyRequest {
public string Action { get; set; }
public List Ids { get; set; }
public Dictionary Params { get; set; }
}
// 後端直接接收 DTO(Ext Direct 支持自動綁定)
[DirectMethod]
public ActionResult MyMethod(MyRequest request, DirectEventArgs e) {
// request 已自動填充
}
JS 端傳對象字面量:App.direct.MyMethod({action: 'del', ids: [1,2,3]}, null, cb)
| 現象 | 原因 | 解決 |
|---|---|---|
| 參數為 null | JS 數組未正確構建 | console.log 參數再調用 |
| 類型轉換異常 | JS number 對應 C# long/double | 用 Convert.ToXxx 安全轉換 |
| 回調不執行 | 後端拋異常未捕獲 | 全局異常過濾器記錄日誌 |
掌握 object[] + DirectEventArgs 模式,靈活應對 Ext Direct 不定參數傳遞場景。