【问题标题】:How to pre-select DropDownListFor item?如何预先选择 DropDownListFor 项目?
【发布时间】:2019-08-20 09:18:49
【问题描述】:

我在剃须刀页面中有这个:

@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)。

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

【问题讨论】:

  • 我遇到了同样的问题,老实说,我不知道是否有更好的解决方案,但为了克服这个问题,我使用 <select><option> 标签手动呈现下拉列表,然后使用 if声明将selected 放在我需要的地方

标签: razor-pages html.dropdownlistfor


【解决方案1】:

您实际上并没有使用标签助手。您正在使用经典 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多