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

时间:2015-06-02 20:50:28

标签: asp.net-mvc html.dropdownlistfor

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

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

3 个答案:

答案 0 :(得分:30)

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

@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"))

答案 1 :(得分:3)

查看docs for this overload

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)

答案 2 :(得分:0)

您可以初始化title:nth-of-type(3) { color: red !important; } 列表(在视图中直接在此处完成),然后将其传递给SelectListItem助手:

DropDownList