นี่เป็นวิธีแก้ปัญหาอย่างง่ายที่ทำให้ซี # enum เป็นเซิร์ฟเวอร์กับ JSON และใช้ผลลัพธ์เพื่อเติม<select>
องค์ประกอบของฝั่งไคลเอ็นต์ ใช้งานได้กับทั้ง enums อย่างง่ายและ bitflag enums
ฉันได้รวมวิธีการแก้ปัญหาแบบครบวงจรเพราะฉันคิดว่าคนส่วนใหญ่ต้องการเรียงลำดับ C # enum ให้กับ JSON ก็อาจจะใช้วิธีนี้เพื่อเติมรายการ<select>
แบบหล่นลง
ไปที่นี่:
ตัวอย่าง Enum
public enum Role
{
None = Permission.None,
Guest = Permission.Browse,
Reader = Permission.Browse| Permission.Help ,
Manager = Permission.Browse | Permission.Help | Permission.Customise
}
enum ที่ซับซ้อนที่ใช้ OR ค่าบิตเพื่อสร้างระบบการอนุญาต ดังนั้นคุณไม่สามารถพึ่งพาดัชนีอย่างง่าย [0,1,2 .. ] สำหรับค่าจำนวนเต็มของ enum
ฝั่งเซิร์ฟเวอร์ - 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);
};
รหัสข้างต้นใช้เฟรมเวิร์ก NancyFX เพื่อจัดการกับคำขอรับ มันใช้Response.AsJson()
วิธีการช่วยเหลือของ Nancy แต่ไม่ต้องกังวลคุณสามารถใช้ฟอร์แมต JSON มาตรฐานใด ๆ เนื่องจาก enum ได้รับการฉายในรูปแบบที่ไม่ระบุชื่อแบบง่ายพร้อมสำหรับการทำให้เป็นอนุกรม
สร้าง JSON
[
{"Id":0,"Name":"None"},
{"Id":2097155,"Name":"Guest"},
{"Id":2916367,"Name":"Reader"},
{"Id":4186095,"Name":"Manager"}
]
ฝั่งไคลเอ็นต์ - CoffeeScript
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>