mvc - Lista de ASP.NET de Databind de ListItem al problema DropDownList
dropdownlist c# selectedvalue (5)
Debes unir tu lista desplegable como:
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataTextField = "Value";
ddlPrimaryContact.DataValueField = "Text";
ddlPrimaryContact.DataBind();
Si pregunta por qué, hasta donde yo sé, los controles de datos toman textos y valores (si no se suministran como se indicó anteriormente) llamando al método ToString para cada elemento en la recopilación de fuentes de datos. Entonces cada ListItem en su colección devuelve su propiedad Text por el método ToString.
Me acabo de encontrar con esta cosa extraña que esperaba trabajar de una manera diferente (lógica), pero no es así. Es un error o una característica"?
Así que hay una DropDownList que estoy poblando en el código detrás de una Lista de ListItem. Cada nuevo ListItem obtiene 2 argumentos que, de acuerdo con la documentación proporcionada por intellisense, corresponden a su texto y valor:
List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();
Ahora, ¿alguien puede explicarme por qué DropDownList, tanto el Texto como el Valor configurados exactamente igual (el texto de ListItem), en lugar de usar ListItem.Text como el Texto y ListItem.Value como el Valor?
ARGH !! http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg
¿O estoy haciendo algo mal?
Hay una manera de agregar elementos de ListItem a DropDownList y tener .NET automágicamente coincide con el texto de ListItem con el texto de DropDownList, y lo mismo con Value:
List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());
Hola cuando enlace datos (a cualquier cosa) necesita establecer DataTextField y DataValueField de su DropDownList. En tu caso deberías usar el siguiente código
List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
{
users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
}
ddlPrimaryContact.DataTextField = "Text";
ddlPrimaryContact.DataValueField = "Value";
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();
O, alternativamente, podrías unirlo de esta manera. (Suponiendo que puede agregar una propiedad readOnly a SubscriptionUser llamada FullName (que devuelve su.FirstName + "" + su.LastName)
ddlPrimaryContact.DataSource = subscriptionDetails.UserList;
ddlPrimaryContact.DataBind();
luego, en su página ASPX ponga:
<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />
también puede agregar directamente el elemento de lista al menú desplegable.
List<ListItem> users = new List<ListItem>();
for (int count = 0; count < 10; count++)
{
ListItem li = new ListItem("List " + count.ToString(), count.ToString());
ddl.Items.Add(li);
}