web-dev-qa-db-ja.com

Razor構文で静的ドロップダウンを作成する方法は?

GoogleとStack Overflowで何時間も調べた後、データベースからではない完全に脳死の単純なドロップダウンリストを作成する方法の血なまぐさい例を見つけることができません。正直なところ、MVCの周りで頭を悩ませています。誰かがこれを作成する方法を教えてください:

<select name="FooBarDropDown" id="FooBarDropDown">
    <option value="Option1" selected>This is Option 1</option>
    <option value="Option2">This is Option 2</option>
    <option value="Option3">This is Option 3</option>
</select>

これを使用して:

@Html.DropDownList....

私はオールインワンラインソリューションを探しています...すべてのビューで。私は構文の時代の悪魔を抱えています。

15
Casey Crookston

これがあなたが探しているものだと思います。ただし、リストの構成をビューモデルまたはコントローラーにリファクタリングすることをお勧めします。

@Html.DropDownList("FooBarDropDown", new List<SelectListItem>
{
    new SelectListItem{ Text="Option 1", Value = "1" },
    new SelectListItem{ Text="Option 2", Value = "2" },
    new SelectListItem{ Text="Option 3", Value = "3" },
 }) 

これをコントローラーに配置する例は次のようになります。

public ActionResult ExampleView()
{
    var list = new List<SelectListItem>
    {
        new SelectListItem{ Text="Option 1", Value = "1" },
        new SelectListItem{ Text="Option 2", Value = "2" },
        new SelectListItem{ Text="Option 3", Value = "3", Selected = true },
    }; 

    ViewData["foorBarList"] = list;
    return View();
}

そしてあなたの見解では:

@Html.DropDownList("fooBarDropDown", ViewData["list"] as List<SelectListItem>)

これが本当に他のビュー/コントローラーで再利用しなければならない静的リストである場合、このロジックを静的クラスのソートに入れることを検討します。例:

public static class DropDownListUtility
{   
    public static IEnumerable<SelectListItem> GetFooBarDropDown(object selectedValue)
    {
        return new List<SelectListItem>
        {
            new SelectListItem{ Text="Option 1", Value = "1", Selected = "1" == selectedValue.ToString()},
            new SelectListItem{ Text="Option 2", Value = "2", Selected = "2" == selectedValue.ToString()},
            new SelectListItem{ Text="Option 3", Value = "3", Selected = "3" == selectedValue.ToString()},
        };             
    }

その後、リストにアクセスするいくつかの異なる方法が残ります。

コントローラーの例:

public ActionResult ExampleView()
{
    var list = DropDownListUtility.GetFooBarDropDown("2"); //select second option by default;
    ViewData["foorBarList"] = list;
    return View();
}

例を表示:

@Html.DropDownList("fooBarDropDown", DropDownListUtility.GetFooBarDropDown("2"))
34
Brandon O'Dell

このオーバーロードのドキュメント をご覧ください

_public static MvcHtmlString DropDownList(
  this HtmlHelper htmlHelper,
  string name,
  IEnumerable<SelectListItem> selectList
)
_

したがって、オプションを使用してList<SelectListItem>()への参照を追加するだけです。

_List<SelectListItem> items = new List<SelectListItem>();
 items.Add(new SelectListItem { Text = "Option1", Value = "Option1"});
 items.Add(new SelectListItem { Text = "Option2", Value = "Option2" });
 items.Add(new SelectListItem { Text = "Option3", Value = "Option3", Selected = true });
_

コントローラーから渡したくない場合は、ビューに埋め込むこともできます。

_@{
    List<SelectListItem> items = ...
}
_

次にそれを使用する

_@Html.DropDownList("FooBarDropDown", items)
_
3
Jasen