.NET Core <select>具有默认值?

VSO*_*VSO 7 c# razorengine asp.net-core asp.net-core-tag-helpers

我的目标是生成一个预先选定<select>的某个选择值(<option>)的下拉列表,因此最终的HTML应该如下所示:

<select>
  <option value = "1">Option1</option>
  <option value = "2" selected>Option2</option>
  <option value = "3">Option3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

请注意,值为2的选项具有一个selected属性,表示它将在单击下拉列表之前显示.我不能(并且我想尝试)使用.NET Core Tag Helpers实现这一目标.

这是我的模型(我认为你可以安全地忽略细节):

public class ReportViewModel
{
  [Display(Name = "Pick a form")]
  public IEnumerable<Form> AvailableForms { get; set; }

  public Form SelectedForm { get; set; }

  public List<ReportData> FormResponses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是Form对象那里只是有IdName它的属性.

这是我的选择声明:

<label asp-for="SelectedForm.Name" class="form-control-label font-weight-bold"></label>
<select asp-for="SelectedForm.Name"
        class="form-control"
        onchange ="onFormSelected(this.value)"
        asp-items="@(new SelectList(Model.AvailableForms, "Id", "Name"))">
</select>
Run Code Online (Sandbox Code Playgroud)

我没有在Microsoft指南博客中看到关于该主题的答案

Ton*_*eri 6

基本上,您需要设置 select 以使用该SelectedForm.Id属性,然后指定要在控制器中选择的表单的值。我不得不稍微更新您的代码,但这对我有用-

<label asp-for="SelectedForm" class="form-control-label font-weight-bold"></label>
<select asp-for="SelectedForm.Id"
        class="form-control"
        onchange ="onFormSelected(this.value)"
        asp-items="@(new SelectList(Model.AvailableForms, "Id", "Name"))">
</select>
Run Code Online (Sandbox Code Playgroud)

然后在你的控制器中

var vm = new ReportViewModel()
{
    AvailableForms = new List<Form>()
};

var form2 = new Form() { Id = 2, Name = "Bar" };
(vm.AvailableForms as List<Form>).Add(new Form() { Id = 1, Name = "Foo" });
(vm.AvailableForms as List<Form>).Add(form2);
(vm.AvailableForms as List<Form>).Add(new Form() { Id = 3, Name = "Baz" });

vm.SelectedForm = form2;

return View(vm);
Run Code Online (Sandbox Code Playgroud)