2

私には<asp:ListItem>コントロールがあり、これを2つの値に拡張しようとしています。誰かが私がこれをするのを手伝ってくれますか?

基本的に欲しい<asp:ListItem value="x" value2="b" text="Hello">

誰かが私がこれを達成する方法を知っていますか?オブジェクトを作成し、適切な.ToString()メソッドでファイルされた値に格納することを考えましたが、文字列はリストアイテムにしか格納できません。

これをHTMLで作成した場合、属性をスローして読み取ることができますが、コードビハインドでリストアイテムを作成するため、属性を追加する方法がわかりません。

アップデート

1つの方法は、HTML5で使用される「data-」を使用することです。ただし、双方向データの場合、コントロールをオーバーライドして追加の値を追加し、ViewStateがそれをキャッシュするようにします。

4

1 に答える 1

1

クライアントスクリプトで属性を使用する必要がある場合は、valuejsonStringを保存することをお勧めします。回避策は次のとおりです。

<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>
于 2012-08-23T08:32:13.563 に答える