31

在我的页面上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>

谢谢。

PS您建议使用 aSqlDataSource还是以另一种方式填充更好?

4

5 回答 5

55

您可以简单地在 DropDownList 标记内添加一个ListItem 。之后将附加来自 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>
于 2009-06-11T21:20:47.183 回答
21
<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我添加的属性。

于 2009-06-11T21:19:05.393 回答
6

我还没有真正测试过,但我假设您可以在绑定下拉列表后添加一个项目。您可以将此事件添加到您想将此空框添加到的任何下拉列表中。

protected void DropDownList_DataBound(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        ListItem emptyItem = new ListItem("", "");
        ddl.Items.Insert(0, emptyItem);
    }
于 2009-06-11T21:27:43.563 回答
2

我解决了更改选择命令添加一个空选项:

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

问候!!!

于 2012-11-30T16:45:28.543 回答
1

在我的剃刀式实现中,它看起来像这样:

@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 和一些模型检查来处理所有事情。

于 2015-09-22T12:27:21.300 回答