4

ASP.NETの各ListItemには、valueプロパティとtextプロパティがあります。3番目の値も保存する必要があります。私のハックは、特別な区切り文字と3番目の値をValueプロパティに連結することです。ただし、FindByValueメソッドを使用すると、これが面倒になります。

3番目の値を保存するためのより良い方法またはFindByValueを使用するための良い方法はありますか。(FindByTextは使用できません)。Tagプロパティがあればいいのにと思います。

4

1 に答える 1

4

andプロパティDropDownListで定義されたbindを使用している場合、3番目の値をそれ自体に保存する良い方法はありません。別々に保存することができます。DataTextFieldDataValueFieldDropDownList

マークアップを使用して定義している場合DropDownListは、カスタム属性として定義してみてください。

<asp:DropDownList ID="ddlDummy" runat="server">
    <asp:ListItem Text="x" Value="y" ThirdValue="z" />
</asp:DropDownList>

それを取得するには、FindByValueを使用ThirdValueして、ListItemから属性を取得できます。

ListItem item = ddlDummy.Items.FindByValue("y");
string value = item.Attributes["ThirdValue"];

ただし、奇妙なことに、アイテムを動的に生成すると、属性は永続化されません。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        ListItem item = new ListItem("x", "y");
        item.Attributes.Add("ThirdValue", "z");
        ddlDummy.Items.Add(item);
    }
}

これがあなたの場合であるならば、あなたは回避策を与えるこの質問を見ることができます:

DropDownListのListItems属性はポストバックで失われますか?

于 2013-02-20T23:56:33.290 に答える