在 SelectList 上使用 Html.DropDownList

Joh*_*ohn 2 html-helper razor asp.net-mvc-4

我的模型类中有以下代码:-

public class PageOptions
    {
        public PageOptions()
    {
      int  size = Int32.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["TechPageSize"]);
            NameSelectionOptions = new SelectList(
            new List<SelectListItem> {
            new SelectListItem { Text=size.ToString(), Value = size.ToString()},
            new SelectListItem { Text="50", Value = "50"}, 
            new SelectListItem { Text="100", Value = "100"},
            new SelectListItem { Text="200", Value = "200"},
            new SelectListItem { Text="500", Value = "500"}
        }, "Value", "Text");

    }

    public SelectList NameSelectionOptions { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我如何在 Html.DropDownList 中显示 SelectList ?并将默认值设置为大小?谢谢

Gon*_*ing 5

您只需将所需的选择作为第四个参数传递给SelectList构造函数即可:

NameSelectionOptions = new SelectList(
    new List<SelectListItem> {
    new SelectListItem { Text=size.ToString(), Value = size.ToString()},
    new SelectListItem { Text="50", Value = "50"}, 
    new SelectListItem { Text="100", Value = "100"},
    new SelectListItem { Text="200", Value = "200"},
    new SelectListItem { Text="500", Value = "500"}
}, "Value", "Text", size);   // <<< Add size here
Run Code Online (Sandbox Code Playgroud)

这比在列表中选择特定项目要灵活得多。

有多个选项可用于将列表绑定到视图。您可以在 ViewModel 中使用属性,但是标准做法(根据 Microsoft 的脚手架模板)是将下拉列表传递到与Model 属性同名的ViewBag 条目中的视图。这样做的额外好处是自动将更简单的@Html.DropDownList("Size")版本绑定到名为 的模型属性Size和 中的列表ViewBag.Size

例如

在控制器中:

ViewBag.Size = new SelectList(
    new List<SelectListItem> {
    new SelectListItem { Text=size.ToString(), Value = size.ToString()},
    new SelectListItem { Text="50", Value = "50"}, 
    new SelectListItem { Text="100", Value = "100"},
    new SelectListItem { Text="200", Value = "200"},
    new SelectListItem { Text="500", Value = "500"}
}, "Value", "Text", size);   // <<< Add size here
viewModel.Size = size;
return View(viewModel);
Run Code Online (Sandbox Code Playgroud)

其中 viewModel 包含您要编辑的任何属性(包括Size)。

在视图中:

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

或者如果您更喜欢强类型版本。

   @Html.DropDownListFor(m=>m.Size, (SelectList)ViewBag.Size)
Run Code Online (Sandbox Code Playgroud)

无论如何,一致的命名将有助于避免问题。

默认值可以放入 ViewBag 中,但选择应该绑定到您的 ViewModel,以便您可以使用相同的 ViewModel 来接收回发的值。

   @Html.DropDownListFor(m=>m.Size, (SelectList)ViewBag.Size, ViewBag.DefaultSize)
Run Code Online (Sandbox Code Playgroud)

更新:

如果您不希望将当前值绑定到任何内容(根据注释),您只需要通过控制器将其设置ViewBag.Size为您SelectList,并将其设置为视图。您不需要模型中的值。

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

默认选择是new SelectList()上面的选择(第四个参数,大小)。