如何在Razor语法中创建静态下拉列表?

Cas*_*ton 15 asp.net-mvc html.dropdownlistfor

在看了谷歌和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>
Run Code Online (Sandbox Code Playgroud)

使用这个:

@Html.DropDownList....
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个一体化的解决方案......在视图中.我在语法上有一段时间的魔鬼.

Bra*_*ell 35

我想这就是你要找的东西.尽管将列表构造重构为视图模型或控制器是最好的.

@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" },
 }) 
Run Code Online (Sandbox Code Playgroud)

将其放在控制器中的示例可能如下所示:

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();
}
Run Code Online (Sandbox Code Playgroud)

然后在你看来:

@Html.DropDownList("fooBarDropDown", ViewData["list"] as List<SelectListItem>)
Run Code Online (Sandbox Code Playgroud)

如果这是一个真正的静态列表,你可能不得不在其他视图/控制器中重用,那么我会考虑将这个逻辑放入一个静态的类中.例:

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()},
        };             
    }
Run Code Online (Sandbox Code Playgroud)

然后,您将有几种不同的方式来访问列表.

控制器示例:

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

查看示例:

@Html.DropDownList("fooBarDropDown", DropDownListUtility.GetFooBarDropDown("2"))
Run Code Online (Sandbox Code Playgroud)