118

基本的に、SelectList の先頭に、デフォルト値 0 とテキスト値 " -- Select One --" の項目を挿入しようとしています。

何かのようなもの

SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);

これはできますか?

4

13 に答える 13

155

0 の値を主張しない限り、実際にはこれを行う必要はありません。HtmlHelper DropDownList 拡張機能を使用すると、選択の初期値として表示されるオプション ラベルを null 値で設定できます。オプション ラベルを持つ DropDownList シグネチャの 1 つを使用するだけです。

<%= Html.DropDownList( "DropDownValue",
                       (IEnumerable<SelectListItem>)ViewData["Menu"],
                        "-- Select One --" ) %>
于 2009-03-21T02:16:28.923 に答える
86

SelectListItem を入力し、List に変換し、インデックス 0 に値を追加することで、これを機能させました。

List<SelectListItem> items = new SelectList(CurrentViewSetups, "SetupId", "SetupName", setupid).ToList(); 
items.Insert(0, (new SelectListItem { Text = "[None]", Value = "0" }));
ViewData["SetupsSelectList"] = items;
于 2010-04-29T00:23:45.497 に答える
13

@AshOoOの回答が気に入りましたが、@ Rajan Rawalのように、選択したアイテムの状態があれば保持する必要がありました。だから私は彼の方法に私のカスタマイズを追加しましたAddFirstItem()

public static SelectList AddFirstItem(SelectList origList, SelectListItem firstItem)
{
    List<SelectListItem> newList = origList.ToList();
    newList.Insert(0, firstItem);

    var selectedItem = newList.FirstOrDefault(item => item.Selected);
    var selectedItemValue = String.Empty;
    if (selectedItem != null)
    {
        selectedItemValue = selectedItem.Value;
    }

    return new SelectList(newList, "Value", "Text", selectedItemValue);
}
于 2015-06-01T20:31:35.550 に答える
5

ここにあなたのためのhtmlヘルパー

public static SelectList IndividualNamesOrAll(this SelectList Object)
{
    MedicalVarianceViewsDataContext LinqCtx = new MedicalVarianceViewsDataContext();

    //not correct need individual view!
    var IndividualsListBoxRaw =  ( from x in LinqCtx.ViewIndividualsNames 
                                 orderby x.FullName
                                 select x);

    List<SelectListItem> items = new SelectList (
                               IndividualsListBoxRaw, 
                              "First_Hospital_Case_Nbr", 
                              "FullName"
                               ).ToList();

    items.Insert(0, (new SelectListItem { Text = "All Individuals", 
                                        Value = "0.0", 
                                        Selected = true }));

    Object = new SelectList (items,"Value","Text");

    return Object;
}
于 2011-11-29T19:41:15.740 に答える
5
private SelectList AddFirstItem(SelectList list)
        {
            List<SelectListItem> _list = list.ToList();
            _list.Insert(0, new SelectListItem() { Value = "-1", Text = "This Is First Item" });
            return new SelectList((IEnumerable<SelectListItem>)_list, "Value", "Text");
        }

これは必要なことを行う必要があり、選択リストを送信するだけで、インデックス0の項目を含む選択リストが返されます

挿入する必要があるアイテムのテキスト、値、またはインデックスをカスタマイズできます

于 2012-02-06T10:16:58.287 に答える
3

.ToList ().Insert(..)メソッドは、要素をリストに入れます。任意の位置を指定できます。ToList の後に.Insert(0, "- - First Item - -")を追加するだけです

あなたのコード

SelectList list = new SelectList(repository.func.ToList());

新しいコード

SelectList list = new SelectList(repository.func.ToList().Insert(0, "- - First Item - -"));
于 2015-11-03T17:04:53.030 に答える
2

あまりエレガントに聞こえないかもしれませんが、私は通常次のようなことをします:

    var items = repository.func.ToList();
    items.Insert(0, new funcItem { ID = 0, TextValue = "[None]" });
    ViewBag.MyData = new SelectList(items);
于 2012-09-03T04:00:36.467 に答える
1

このオプションはさまざまな方法で必要になる可能性があるため、さまざまなシナリオや将来のプロジェクトで使用できるようにオブジェクトを開発するという結論に達しました

最初にこのクラスをプロジェクトに追加します

public class SelectListDefaults
{
    private IList<SelectListItem> getDefaultItems = new List<SelectListItem>();

    public SelectListDefaults()
    {
        this.AddDefaultItem("(All)", "-1");
    }
    public SelectListDefaults(string text, string value)
    {
        this.AddDefaultItem(text, value);
    }
    public IList<SelectListItem> GetDefaultItems
    {
        get
        {                
            return getDefaultItems;
        }

    }
    public void AddDefaultItem(string text, string value)
    {        
        getDefaultItems.Add(new SelectListItem() { Text = text, Value = value });                    
    }
}

コントローラーアクションでは、このようにすることができます

    // Now you can do like this
    ViewBag.MainCategories = new SelectListDefaults().GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1"));
    // Or can change it by such a simple way
    ViewBag.MainCategories = new SelectListDefaults("Any","0").GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "0"));
    // And even can add more options
    SelectListDefaults listDefaults = new SelectListDefaults();
    listDefaults.AddDefaultItme("(Top 5)", "-5");
    // If Top 5 selected by user, you may need to do something here with db.MainCategories, or pass in parameter to method 
    ViewBag.MainCategories = listDefaults.GetDefaultItems.Concat(new SelectList(db.MainCategories, "MainCategoryID", "Name", Request["DropDownListMainCategory"] ?? "-1"));

最後に View では、このようにコーディングします。

@Html.DropDownList("DropDownListMainCategory", (IEnumerable<SelectListItem>)ViewBag.MainCategories, new { @class = "form-control", onchange = "this.form.submit();" })
于 2015-01-15T21:39:48.793 に答える
1

さて、私はきれいなコードが好きなので、これを拡張メソッドにしました

static public class SelectListHelper
{
    static public SelectList Add(this SelectList list, string text, string value = "", ListPosition listPosition = ListPosition.First)
    {
        if (string.IsNullOrEmpty(value))
        {
            value = text;
        }
        var listItems = list.ToList();
        var lp = (int)listPosition;
        switch (lp)
        {
            case -1:
                lp = list.Count();
                break;
            case -2:
                lp = list.Count() / 2;
                break;
            case -3:
                var random = new Random();
                lp = random.Next(0, list.Count());
                break;
        }
        listItems.Insert(lp, new SelectListItem { Value = value, Text = text });
        list = new SelectList(listItems, "Value", "Text");
        return list;
    }

    public enum ListPosition
    {
        First = 0,
        Last = -1,
        Middle = -2,
        Random = -3
    }
}

使用法 (例):

var model = new VmRoutePicker
    {
     Routes =
     new SelectList(_dataSource.Routes.Select(r => r.RouteID).Distinct())
     };                                     
  model.Routes = model.Routes.Add("All", "All", SelectListHelper.ListPosition.Random);
//or
  model.Routes = model.Routes.Add("All");
于 2012-08-21T23:37:06.713 に答える
0

回避策は、@tvanfosson の回答 (選択した回答) を使用し、JQuery (または Javascript) を使用してオプションの値を 0 に設定することです。

$(document).ready(function () {
        $('#DropDownListId option:first').val('0');
    });

お役に立てれば。

于 2016-07-29T05:20:19.507 に答える
-5

他の誰かがより良い選択肢を持っているかどうかはわかりません...

<% if (Model.VariableName == "" || Model.VariableName== null) { %>
   <%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], "", 
        new{stlye=" "})%>
<% } else{ %>
<%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], 
        Model.VariableName, new{stlye=" "})%>
<% }>
于 2010-01-19T19:10:21.000 に答える