如何预选DropDownListFor项目?

时间:2019-08-20 09:18:49

标签: razor-pages html.dropdownlistfor

我在剃须刀页面上有这个

@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

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

1 个答案:

答案 0 :(得分:0)

您实际上并没有使用标签助手。您正在使用经典MVC中的“旧” HTML帮助器方法。 ASP.NET Core中推荐的方法是实际使用select tag helperasp-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>