pages asp asp.net drop-down-menu sqldatasource dropdownbox

asp.net - asp - razor pages select



lista desplegable asp.net-agregue lĂ­nea en blanco antes de valores db (5)

En mi página tengo una DropDownList que puebla con valores de base de datos de un SqlDataSource (ver el código a continuación).

¿Cómo puedo agregar mi propio texto o una línea en blanco antes de los valores?

<asp:DropDownList ID="drpClient" runat="server" Width="200px" AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" DataValueField="client_id"> </asp:DropDownList> <asp:SqlDataSource ID="dsClients" runat="server" ConnectionString="my_connection_string" ProviderName="System.Data.SqlClient" SelectCommand="SELECT [client_id], [name] FROM [clients]"> </asp:SqlDataSource>

Gracias.

PD: ¿Recomiendas usar un SqlDataSource o es mejor rellenarlo de otra manera?


En la implementación de estilo de maquinilla de afeitar en mí, se ve así:

@Html.EnumDropDownListFor( model => model.Privilege.Role, "-- Select role --", new { @style = "width: 216px !important", @class = "form-control", id = "role", required = "required" })

Y en javascript que se ejecuta en carga, tengo esto:

function PutDefaultPrivilegePanelListHints() { $(''#role'').val(''''); ... }

También hay una solución más flexible mediante una validación discreta (sin contar con HTML5):

$(''.required'').each(function () { $(this).rules(''add'', { required: true, messages: { required: '''' } }) });

Por supuesto, también hay una verificación en el servidor. No creo que sea una buena idea lidiar con las clases. Por ejemplo, todo lo que muestro en la página es algo de clase. Esta clase tiene varias propiedades de tipo enumerable. Sería una pesadilla replicar todas esas propiedades, pero haciéndolas anulables en alguna clase adicional como algunas sugeridas aquí en .

Después de todo, ¿por qué debería cambiar mi lógica comercial por el beneficio de un marcado específico? En cambio, trato con todo a través de javascript y algunas verificaciones de modelo.


Realmente no he probado esto, pero supongo que podría agregar un artículo después de que haya encuadernado la lista desplegable. Puede agregar este evento a cualquier lista desplegable a la que le gustaría agregar este cuadro vacío.

protected void DropDownList_DataBound(object sender, EventArgs e) { DropDownList ddl = (DropDownList)sender; ListItem emptyItem = new ListItem("", ""); ddl.Items.Insert(0, emptyItem); }


Resuelvo cambiar el comando de selección agregando una opción vacía:

<asp:SqlDataSource ID="dsClients" runat="server" ConnectionString="my_connection_string" ProviderName="System.Data.SqlClient" SelectCommand="SELECT [client_id], [name] FROM [clients] union SELECT NULL, ''--- pick one ----'' "> </asp:SqlDataSource>

¡¡¡Saludos!!!


Simplemente puede agregar un ListItem dentro de la Marca de DropDownList. Todos los valores de DataSource se agregarán después de eso.

<asp:DropDownList ID="drpClient" runat="server" Width="200px" AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" DataValueField="client_id" AppendDataBoundItems="true"> <asp:ListItem>-- pick one --</asp:ListItem> </asp:DropDownList>


<asp:DropDownList ID="drpClient" runat="server" Width="200px" AutoPostBack="True" DataSourceID="dsClients" DataTextField="name" DataValueField="client_id" AppendDataBoundItems="True"> <asp:ListItem Text="" Value="" /> </asp:DropDownList>

Es fácil pasar por alto, así que no olvide el atributo AppendDataBoundItems que agregué.