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

How to create a static dropdown in Razor syntax?

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

我正在寻找一种一体化的解决方案...尽在视图中。我在语法上遇到了麻烦。

我想这就是您要找的。最好将列表构造重构到视图模型或控制器中。

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

如果这真的是一个静态列表,您可能必须在其他视图/控制器中重用它,那么我会考虑将此逻辑放入某种静态 class 中。示例:

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

看看 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)

您可以初始化一个 SelectListItem 列表(直接在视图中完成),然后将其传递给 DropDownList 助手:

@{         
    List<SelectListItem> Listitems = new List<SelectListItem>();
    for(int i = 1; i <= 50; i++)
    {
       items.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString() });
    }
 }

 @Html.DropDownList("ddlSequence", Listitems , new { id = "ddlSequence", @class = "form-control" })