クライアントスクリプトで属性を使用する必要がある場合は、value
jsonStringを保存することをお勧めします。回避策は次のとおりです。
<asp:ListItem value="{'d': ['x','b'] }" text="Hello">
サンプル:
Product.cs
public class Product
{
public int ID { get; set; }
public string Name { get; set; }
public string Desc { get; set; }
public string JsonString
{
get
{
return "{\"d\": [\"" + ID + "\",\"" + Desc + "\"]}";
}
}
}
をバインドするList<T>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<Product> products = new List<Product>()
{
new Product(){ ID=1, Name="A", Desc="A1"},
new Product(){ ID=2, Name="B", Desc="B1"},
new Product(){ ID=3, Name="C", Desc="C1"},
};
ListBox1.DataSource = products;
ListBox1.DataTextField = "Name";
ListBox1.DataValueField = "JsonString";
ListBox1.DataBind();
}
}
マークアップ
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$("#ListBox1").change(function () {
var sel = $(this).val();
v = jQuery.parseJSON(sel);
console.log(v.d[0] + " " + v.d[1]);
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
</div>
</body>