.NET Core <select> 有默认值吗?
.NET Core <select> With Default Value?
我的目标是在 selected[=36= 之前生成具有特定 select 值 (<option>
) 的 <select>
下拉列表],所以最终的 HTML
应该是这样的:
<select>
<option value = "1">Option1</option>
<option value = "2" selected>Option2</option>
<option value = "3">Option3</option>
</select>
请注意,值为 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; }
}
请注意,那里的 Form
对象只有 Id
和 Name
属性。
这是我的select声明:
<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>
我在 Microsoft Guide 中没有看到答案
或者在 blog on the topic
基本上您需要将 select 设置为使用 SelectedForm.Id
属性,然后指定要在您的控制器中 select 编辑的表单的值。我不得不稍微更新一下您的代码,但这对我有用 -
<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>
然后在你的控制器中
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);
SelectList
构造函数可以接受一个额外的参数,即 selectedValue
。在你的情况下,你应该能够通过这个,我 认为 看起来像这样:
asp-items="@(new SelectList(Model.AvailableForms, "Id", "Name", Model.SelectedForm.Id))"
我认为 asp-for
不适合您的原因是 SelectedForm.Name
(字符串)的值与 Id
属性 您在 SelectList
构造函数中使用(这是一个整数?)。
您可以在源代码中部分了解其工作原理。你最终 here 在 GenerateOption
:
var selected = item.Selected;
if (currentValues != null)
{
var value = item.Value ?? item.Text;
selected = currentValues.Contains(value);
}
在这一点上,我相信 currentValues
将包含一个元素,它将是一个字符串 (Form.Name
)。我也相信 item.Value
将是例如"1"
所以没有匹配项。
这是旧的,但我没有在这里看到我的方法。
将其与来自控制器的 viewbag 一起传入。
<select>
<option>@ViewBag.selected</option>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
我的目标是在 selected[=36= 之前生成具有特定 select 值 (<option>
) 的 <select>
下拉列表],所以最终的 HTML
应该是这样的:
<select>
<option value = "1">Option1</option>
<option value = "2" selected>Option2</option>
<option value = "3">Option3</option>
</select>
请注意,值为 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; }
}
请注意,那里的 Form
对象只有 Id
和 Name
属性。
这是我的select声明:
<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>
我在 Microsoft Guide 中没有看到答案 或者在 blog on the topic
基本上您需要将 select 设置为使用 SelectedForm.Id
属性,然后指定要在您的控制器中 select 编辑的表单的值。我不得不稍微更新一下您的代码,但这对我有用 -
<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>
然后在你的控制器中
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);
SelectList
构造函数可以接受一个额外的参数,即 selectedValue
。在你的情况下,你应该能够通过这个,我 认为 看起来像这样:
asp-items="@(new SelectList(Model.AvailableForms, "Id", "Name", Model.SelectedForm.Id))"
我认为 asp-for
不适合您的原因是 SelectedForm.Name
(字符串)的值与 Id
属性 您在 SelectList
构造函数中使用(这是一个整数?)。
您可以在源代码中部分了解其工作原理。你最终 here 在 GenerateOption
:
var selected = item.Selected;
if (currentValues != null)
{
var value = item.Value ?? item.Text;
selected = currentValues.Contains(value);
}
在这一点上,我相信 currentValues
将包含一个元素,它将是一个字符串 (Form.Name
)。我也相信 item.Value
将是例如"1"
所以没有匹配项。
这是旧的,但我没有在这里看到我的方法。 将其与来自控制器的 viewbag 一起传入。
<select>
<option>@ViewBag.selected</option>
<option>1</option>
<option>2</option>
<option>3</option>
</select>