2012-08-23 75 views
2

我有一個<asp:ListItem>控件,我期待着擴展它有2個值。有人可以幫助我做到這一點。ASP:ListItem存儲對象

基本上我想<asp:ListItem value="x" value2="b" text="Hello">

有誰知道我可以做到這一點。我想過創建一個對象並使用適當的.ToString()方法將其存儲在值域中,但是我只能將字符串存儲在列表項中。

如果我在HTML中創建了這個屬性,我只能拋出一個屬性並閱讀它們,但是我在後面的代碼中創建了我的列表項,所以我不確定如何添加屬性。

更新

一種方法是使用在HTML5中使用「數據 - 」。但是對於雙向數據來說,控件添加附加值以便ViewState將其緩存。

+1

我認爲,爲了您的使用目的,您只需將它們作爲公共字符串變量添加到您的代碼中,就這些了。 – Aristos

+1

同意!我認爲* *(增加value2屬性)是不可能的。 – adatapost

+1

你有一個關於屬性的觀點http://stackoverflow.com/a/8124098/360171 –

回答

1

如果你的要求是使用客戶端腳本的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>