यहाँ एक सरल समाधान है जो JSON पर एक सर्वर-साइड C # enum को सीरियल करता है और क्लाइंट-साइड को पॉप्युलेट करने के लिए परिणाम का उपयोग करता है <select>
तत्व । यह सरल एनम और बिटफ्लैग एनम दोनों के लिए काम करता है।
मैंने एंड-टू-एंड सॉल्यूशन को शामिल किया है क्योंकि मुझे लगता है कि ज्यादातर लोग JSON पर C # enum को क्रमबद्ध करना चाहते हैं, शायद इसका उपयोग <select>
ड्रॉप-डाउन भरने के लिए भी करेंगे ।
यहाँ जाता हैं:
उदाहरण एनुम
public enum Role
{
None = Permission.None,
Guest = Permission.Browse,
Reader = Permission.Browse| Permission.Help ,
Manager = Permission.Browse | Permission.Help | Permission.Customise
}
एक जटिल एनम जो एक अनुमति प्रणाली उत्पन्न करने के लिए बिटवाइज़ ओआरएस का उपयोग करता है। तो आप एनम के पूर्णांक मान के लिए सरल सूचकांक [0,1,2 ..] पर भरोसा नहीं कर सकते।
सर्वर साइड - C #
Get["/roles"] = _ =>
{
var type = typeof(Role);
var data = Enum
.GetNames(type)
.Select(name => new
{
Id = (int)Enum.Parse(type, name),
Name = name
})
.ToArray();
return Response.AsJson(data);
};
ऊपर का कोड गेट रिक्वेस्ट को संभालने के लिए नैन्सीएफएक्स फ्रेमवर्क का उपयोग करता है। यह नैन्सी की Response.AsJson()
सहायक विधि का उपयोग करता है - लेकिन चिंता न करें, आप किसी भी मानक JSON फॉर्मैटर का उपयोग कर सकते हैं क्योंकि एनम पहले से ही क्रमांकन के लिए तैयार एक साधारण अनाम प्रकार में पेश किया गया है।
जेनसन बनाया
[
{"Id":0,"Name":"None"},
{"Id":2097155,"Name":"Guest"},
{"Id":2916367,"Name":"Reader"},
{"Id":4186095,"Name":"Manager"}
]
क्लाइंट साइड - कॉफीस्क्रिप्ट
fillSelect=(id, url, selectedValue=0)->
$select = $ id
$option = (item)-> $ "<option/>",
{
value:"#{item.Id}"
html:"#{item.Name}"
selected:"selected" if item.Id is selectedValue
}
$.getJSON(url).done (data)->$option(item).appendTo $select for item in data
$ ->
fillSelect "#role", "/roles", 2916367
HTML से पहले
<select id="role" name="role"></select>
HTML के बाद
<select id="role" name="role">
<option value="0">None</option>
<option value="2097155">Guest</option>
<option value="2916367" selected="selected">Reader</option>
<option value="4186095">Manager</option>
</select>