一、定義枚舉
public enum SiteTypeEnum
{
中轉部 = 1,
網點 = 2
}
還有 BooleanEnum 和 OptTypeEnum 這兩個枚舉,這里暫且省略了它們的定義。
二、服務端方法
這里總共轉化了 3 個枚舉
public class UtilityController : BaseController
{
[CheckLogin]
[HttpPost]
public JsonResult GetEnumData()
{
JsonResult<object> result = new JsonResult<object>();
string booleanEnumJson = typeof(BooleanEnum).EnumToJson();
string siteTypeEnumJson = typeof(SiteTypeEnum).EnumToJson();
string optTypeEnumJson = typeof(OptTypeEnum).EnumToJson();
result.Data = new
{
enumData = new Dictionary<string, object>()
{
{ "booleanEnumJson", booleanEnumJson },
{ "siteTypeEnumJson", siteTypeEnumJson },
{ "optTypeEnumJson", optTypeEnumJson }
}
};
return Json(result, JsonRequestBehavior.AllowGet);
}
}
注意,除了枚舉自身名稱之外,其余之處一律采用 -Json 后綴,方便識別。
三、客戶端請求
1、數據定義
服務端的枚舉,對應於 js 端的數組
// 布爾值
var BooleanEnum = [
];
// 網點類型
var SiteTypeEnum = [
];
// 操作類型
var OptTypeEnum = [
];
2、請求
此處的代碼與上述定義同屬一個 js 文件,這里不需要“自執行函數”,以確保枚舉數組可以被全局訪問。
$(document).ready(function () {
var urlEnum = {
GetEnumData: "/Utility/GetEnumData"
};
// 發起請求
$.ajax({
data: {},
type: "POST",
dataType: "JSON",
async: false,
url: urlEnum.GetEnumData,
success: function (result) {
console.info("返回的枚舉數據為:↓ ");
console.info(JSON.stringify(result.Data, null, 4));
if (result.Status) {
var data = result.Data;
bindData(data, "booleanEnumJson", "BooleanEnum", BooleanEnum);
bindData(data, "siteTypeEnumJson", "SiteTypeEnum", SiteTypeEnum);
bindData(data, "optTypeEnumJson", "OptTypeEnum", OptTypeEnum);
} else {
// 提示失敗
alert(result.StatusMessage);
}
}
}); // end ajax
/*
* 綁定數據
* data 數據源
* targetArray 數組變量
*/
function bindData(data, stringJson, typeOfEnum, targetArray) {
// 布爾值
var enumJson = $.parseJSON(data.enumData[stringJson])[typeOfEnum];
$.each(enumJson, function (text, val) {
var obj = {
name: text,
value: val
};
targetArray.push(obj);
});
}
});
參數說明:
參數名 | header含義 |
---|---|
data | 包含所有枚舉的數據源 |
stringJson | Dictionary 的鍵,比如 siteTypeEnumJson |
typeOfEnum | 枚舉名稱,比如 SiteTypeEnum |
targetArray | js 數組變量 |