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 ?并将默认值设置为大小?谢谢
您只需将所需的选择作为第四个参数传递给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()上面的选择(第四个参数,大小)。