Frage

Auf meiner Seite Ich habe eine DropDownList, die ich mit Datenbankwerten von einem SqlDataSource (siehe Code unten) füllen.

Wie kann ich meinen eigenen Text oder eine Leerzeile vor den Werten hinzufügen?

<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>

Danke.

P. S. Haben Sie empfehlen eine SqlDataSource mit oder ist es besser, einen anderen Weg zu bevölkern?

War es hilfreich?

Lösung

Sie können einfach eine ListItem in der Dropdown Markup. Alle Werte aus der Datasource wird danach angehängt werden.

<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>

Andere Tipps

<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 ist leicht zu übersehen, so vergessen Sie nicht, das AppendDataBoundItems Attribut ich hinzu.

Ich habe nicht wirklich diese getestet, aber ich gehe davon aus, dass Sie ein Element hinzufügen könnten, nachdem Sie die die Dropdown-Liste binded haben. Sie könnten diese Veranstaltung zu einer Drop-Down-Liste hinzuzufügen, die Sie dieses leere Feld hinzufügen möchten.

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

Ich löse den Befehl select Ändern eine leere Option hinzufügen:

        <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>

Grüße !!!

In rasiermesser Stil Implementierung bei mir sieht es wie folgt aus:

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

Und in Javascript, die auf Last ausgeführt wird, ich habe dies:

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

Es gibt auch flexiblere Lösung über unauffällige Validierung (nicht auf HTML5 zählen):

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

Natürlich gibt es eine serverseitige Überprüfung, auch. Ich glaube nicht, es ist eine gute Idee, mit Klassen zu bewältigen. Zum Beispiel alles, was ich in der Seite zeige einige Klassen. Diese Klasse hat mehrere enumerable Typeigenschaften. Es wäre ein Alptraum all diese Eigenschaften zu replizieren, sondern macht sie in einigen zusätzlichen Klassen Nullable-da einige, die hier auf Stackoverflow vorgeschlagen.

Nach allem, warum soll ich im Interesse irgendeinen bestimmten Markup meiner Geschäftslogik ändern? Stattdessen beschäftige ich mich mit allem, was über Javascript und einige Modelle überprüft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top