Asp.net dropdownlist - добавить пустую строку до значений db
На моей странице у меня есть 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
или лучше ли заполнять другой способ?
Ответы
Ответ 1
Вы можете просто добавить ListItem внутри разметки DropDownList. После этого будут добавлены все значения из DataSource.
<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>
Ответ 2
<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
.
Ответ 3
Я действительно не тестировал это, но предполагаю, что вы можете добавить элемент после того, как вы связали выпадающий список. Вы можете добавить это событие в любой раскрывающийся список, который хотите добавить в это пустое поле.
protected void DropDownList_DataBound(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
ListItem emptyItem = new ListItem("", "");
ddl.Items.Insert(0, emptyItem);
}
Ответ 4
Я решаю изменить команду select, добавляя пустую опцию:
<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>
Привет!!!
Ответ 5
В реализации стиля бритва у меня это выглядит так:
@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 и некоторых проверок модели.