如何预先选择下拉列表项目?



我在剃刀页面中有这个:

@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的参数是:

  1. 指定回发表单时要设置的模型属性
  2. 构建项目列表以填充下拉列表
  3. 提供默认的"项目 0"以添加到下拉列表顶部并预选择

我想避免#3(我不希望将项目添加到下拉列表的顶部(,而只需让下拉列表预先选择m.UserCulture指定的项目(或者更确切地说,Model.UserCulture(。

简而言之,我的问题似乎是预先选择一个项目(使用此标签助手(的唯一方法是使用第三个参数将该项目添加到下拉列表的顶部。

您实际上并没有使用标记帮助程序。您正在使用经典 MVC 中的"旧"HTML 帮助程序方法。ASP.NET Core 中推荐的方法是实际使用选择标记帮助程序。asp-items属性采用SelectListSelectListItem的集合。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>

最新更新