我在剃刀页面中有这个:
@Html.DropDownListFor(
m => m.UserCulture, // eg: "United Kingdom (+44)"
Model.Countries.Select(m => new SelectListItem {
Text = m.Name + " (" + m.CallingCode + ")", // eg: "United Kingdom (+44)"
Value = m.CallingCode // eg: "+44"
}).ToList(),
Model.UserCulture // eg: "United Kingdom (+44)"
)
据我所知,要DropDownListFor
的参数是:
- 指定回发表单时要设置的模型属性
- 构建项目列表以填充下拉列表
- 提供默认的"项目 0"以添加到下拉列表顶部并预选择
我想避免#3(我不希望将项目添加到下拉列表的顶部(,而只需让下拉列表预先选择m.UserCulture
指定的项目(或者更确切地说,Model.UserCulture
(。
简而言之,我的问题似乎是预先选择一个项目(使用此标签助手(的唯一方法是使用第三个参数将该项目添加到下拉列表的顶部。
您实际上并没有使用标记帮助程序。您正在使用经典 MVC 中的"旧"HTML 帮助程序方法。ASP.NET Core 中推荐的方法是实际使用选择标记帮助程序。asp-items
属性采用SelectList
或SelectListItem
的集合。asp-for
属性采用所选值绑定到的项目。您可以通过为所选值指定默认值来设置该值:
// PageModel properties
[BindProperty]
public string UserCulture { get; set; } = "United Kingdom (+44)";
public List<SelectListItem> Options { get; set; }
// instantiate in e.g. OnGet
Options = Model.Countries.Select(m => new SelectListItem {
Text = m.Name + " (" + m.CallingCode + ")", // eg: "United Kingdom (+44)"
Value = m.CallingCode // eg: "+44"
}).ToList()
<select asp-for="UserCulture" asp-items="Model.Options"></select>