ResumenASP.NET WebForms DropDownList enlace de datos comportamiento extraño?
I cargar ciudades desde el contexto de datos en dos listas diferentes y se unen a sus respectivos controles DropDownList.
Aunque el código es el mismo para ambos, y solo los datos y obviamente el nombre de los controles son diferentes, el enlace de datos parece no funcionar correctamente para solo uno de ellos. ¡En lugar de mostrar el nombre de la ciudad, muestra su Id, es decir, solo para la primera opción!
de código subyacente
Tenemos dos controles DropDownList:
DestinationDropDownList
;OriginDropDownList
.
Luego, las puebla.
public partial class MyControl : UserControl {
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
var instruction = new City() {
CityId = Guid.Empty,
CityName = "- Select a city -"
};
var destinations = context.Cities.ToList();
destinations = destinations.OrderBy(c => c.CityName).ToList();
destinations.Insert(0, instruction);
DestinationDropDownList.DataSource = destinations;
DestinationDropDownList.DataTextField = "CityName";
DestinationDropDownList.DataValueField = "CityId";
DestinationDropDownList.DataBind();
var origins = context.Cities.ToList();
origins = origins.OrderBy(c => c.CityName).ToList();
origins.Insert(0, instruction);
OriginDropDownList.DataSource = origins;
OriginDropDownList.DataTextField = "CityName";
OriginDropDownList.DataValueField = "CityId";
OriginDropDownList.DataBind();
}
}
private static readonly MyDataContext context = new MyDataContext();
}
HTML
<asp:DropDownList ID="DestinationDropDownList" runat="server" />
<asp:DropDownList ID="OriginDropDownList" runat="server" />
Datum muestra
*DestinationDropwDownList*
- 0000-0000-0000-0000-0000 (empty Guid)
- CityName 01
- CityName 02
- ...
*OriginDropDownList*
- - Select a city -
- CityName 01
- CityName 02
- ...
La visualización correcta es la representada por el control OriginDropDownList
. ¿Por qué DestinationDropDownList
no muestra los datos correctamente, es decir, para el primer y único primer elemento en su lista? ¡No lo entiendo en absoluto y perdí unas pocas horas tratando de encontrar la solución! = (
- I intentado quitar el primer elemento antes de insertar la instrucción;
- traté de insertar la instrucción dos veces, a continuación, quitar la primera;
- Intenté ir junto con el método
DropDownList.Items.Add(string)
, y esto mostraba nada en cuanto a la primera fila, en lugar del Guid vacía.
Preguntas
- ¿Alguna vez ha encontrado estos problemas con el control DropDownList?
- ¿Cómo corregir este comportamiento?
editar # 1
michielvoo 's respuesta me ayudó a encontrar una nueva forma de unión a la instrucción de datos. A través de su código, la solución encontrada es la siguiente:
<asp:DropDownList ID="DestinationDropDownList" runat="server"
AppendDataBoundItems="true"
CssClass="required">
<asp:ListItem Value="- Select a city -" />
</asp:DropDownList>
retirar el inserto de instrucciones desde dentro del código por esta única DropDownList. Ahora muestra exactamente lo que quería desde el principio.
Acepté su respuesta ya que fue él quien me condujo a una buena solución. No creo que sea la solución real, pero siempre y cuando los resultados sean los suyos, no me importa demasiado. Además, en lugar de verificar Guid.Empty
para la validación de la página, tendré que verificar mis instrucciones e invalidar la página cuando el usuario no seleccione una ciudad ubicada en otro índice que no sea 0, desde mi chequeo con Guid
fallará.
editar # 2
Con el código subyacente se indica en la respuesta de michielvoo, que resuelve totalmente el problema que tuve para la DropDownList
visualizar la propiedad ListItem.Value
lugar de la propiedad ListITem.Text
por sólo y sólo el primer elemento en la lista. No sé qué pasa con las otras formas, ¡pero esta funciona muy bien!
Gracias michielvoo!
Gracias a todos por su amable apoyo! =)
Im no se puede reproducir este problema ... – JonH
JonH: Estoy un poco contento de que no se puede, porque es un dolor cuando sucede! ;) ¡Gracias por tu granito de sal! =) –
No entiendo por qué te está pasando esto ... – JonH