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を使用することをお勧めしますか、SqlDataSourceそれとも別の方法で入力する方が良いですか?

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: '' } }) });

もちろん、サーバー側のチェックもあります。クラスに対応するのは良い考えではないと思います。たとえば、ページに表示されるものはすべて、何らかのクラスです。このクラスには、列挙可能な型のプロパティがいくつかあります。これらすべてのプロパティをレプリケートするのは悪夢ですが、スタックオーバーフローでここで提案されているように、いくつかの追加クラスでそれらを null 可能にします。

結局のところ、特定のマークアップのためにビジネス ロジックを変更する必要があるのはなぜでしょうか。代わりに、javascript といくつかのモデル チェックを介してすべてを処理します。

于 2015-09-22T12:27:21.300 に答える