La propiedad Attributes de un control ListItem sólo funciona dentro de un control HtmlSelect

Síntomas

Cuando se utiliza el control RadioButton o DropDownList , si intenta colocar un par de clave y valor en el control de ListItem , los pares de clave y valor no se escriben en la página de resultados.

Por ejemplo, el siguiente código RadioButtonList

<asp:RadioButtonList id="RadioButtonList1" runat="server"><asp:ListItem Value="v1" Key="k1">1</asp:ListItem>
</asp:RadioButtonList>

- o -
RadioButtonList1.Items[0].Attributes.Add("key", "k1");
sólo se devuelve el siguiente resultado:

<input id="RadioButtonList1_0" type="radio" name="RadioButtonList1" value="v1" /><label for="RadioButtonList1_0">1</label>

De forma similar, el siguiente código de DropDownList

<asp:DropDownList id="DropDownList1" runat="server"><asp:ListItem Value="v1" Key="k1">1</asp:ListItem>
</asp:DropDownList>

sólo se devuelve el siguiente resultado:

<option value=v1>1</option>

La "clave = k1" no se procesa.

Causa

El control de ListItem tiene una propiedad de atributos de tipo AttributeCollection. Cuando el control de ListItem está dentro de un control RadioButtonList o un control DropDownList , no se representan los pares de clave y valor que se asignan a la propiedad Attributes del control ListItem (ya sea mediante programación o mediante declaración).

Solución

Para evitar este problema en el control RadioButtonList , utilice un grupo de controles HtmlInputRadioButton . Por ejemplo:

<input id="Radio01" type="radio" name="group1" Key="k1" runat="server" >
Para evitar este problema en el control DropDownList , utilice el control HtmlSelect . Por ejemplo:
<select runat="server"><option value="v1" id="ID1" key="k1">1</option>
</select>

Estado

Este comportamiento es por diseño.

Más información

En la sección "Resolución" de este artículo, se utiliza el control HtmlSelect para mostrar cómo implementar atributos expando como solución para utilizar el control DropDownList . Mientras ambas clases hacen uso de ListItem clase internamente, admiten los atributos expando de forma diferente. Admite el control HtmlSelect usando atributos expando porque su modelo de programación está más centrado en HTML. Sin embargo, es más complicado que procesar sólo los atributos propios admitir atributos expando con el control DropDownList . Por ejemplo, no puede utilizar enlace de datos para admitir atributos con el control DropDownList .
Propiedades

Id. de artículo: 309338 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios