выпадающий список asp.net - добавить пустую строку перед значениями в БД - PullRequest
31 голосов
/ 12 июня 2009

На моей странице есть DropDownList, который я заполняю значениями базы данных из SqlDataSource (см. Код ниже).

Как добавить собственный текст или пустую строку перед значениями?

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

Спасибо.

P.S. Вы рекомендуете использовать SqlDataSource или лучше заполнить другим способом?

Ответы [ 5 ]

52 голосов
/ 12 июня 2009

Вы можете просто добавить ListItem внутри разметки DropDownList. После этого все значения из источника данных будут добавлены.

<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>
21 голосов
/ 12 июня 2009
<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>

Это легко пропустить, поэтому не забывайте добавленный мной атрибут AppendDataBoundItems.

6 голосов
/ 12 июня 2009

Я действительно не проверял это, но я предполагаю, что вы можете добавить элемент после того, как вы связали выпадающий список. Вы можете добавить это событие в любой выпадающий список, в который хотите добавить это пустое поле.

protected void DropDownList_DataBound(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        ListItem emptyItem = new ListItem("", "");
        ddl.Items.Insert(0, emptyItem);
    }
2 голосов
/ 30 ноября 2012

Я решаю изменить команду выбора, добавив пустую опцию:

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

Привет !!! * * 1004

1 голос
/ 22 сентября 2015

В реализации в стиле бритвы у меня это выглядит так:

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

И в javascript, который выполняется при загрузке, у меня есть это:

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

Существует также более гибкое решение с помощью ненавязчивой проверки (не считая HTML5):

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

Конечно, есть и проверка на стороне сервера. Я не думаю, что это хорошая идея, чтобы справиться с занятиями. Например, все, что я показываю на странице, это какой-то класс. Этот класс имеет несколько перечислимых свойств типа. Было бы кошмаром копировать все эти свойства, но сделать их обнуляемыми в каком-то дополнительном классе, как некоторые предлагали здесь в stackoverflow.

В конце концов, почему я должен менять свою бизнес-логику ради какой-то конкретной разметки? Вместо этого я имею дело со всем через javascript и некоторые проверки моделей.

...