我想将字符串值的预定义列表绑定到表单控件,以使用户被迫从列表中进行选择,以适应于输入自己的值。在CRUD EF Core环境中,“创建”和“编辑剃刀”页面均应可访问该列表。选择列表中的项目后,该字符串将用作保存到数据库的输入值。
下面的代码片段仅显示了一个标准的文本输入控件,但我只是一个带有预定义值的下拉列表:
<div class="form-group">
<label asp-for="ConnectorModel.ConnectorType" class="control-label"></label>
<input asp-for="ConnectorModel.ConnectorType" class="form-control" />
<span asp-validation-for="ConnectorModel.ConnectorType" class="text-danger"></span>
</div>
我以前使用以下代码将输入控件更改为下拉列表类型,但是我不知道如何用列表中的项目填充它。我认为说viewbag也是错误的类型是正确的。
<div class="form-group">
<label asp-for="ConnectorModel.ConnectorType" class="control-label"></label>
<select asp-for="ConnectorModel.ConnectorType" class="form-control" asp-items="ViewBag.ConnectorType"></select>
<span asp-validation-for="ConnectorModel.ConnectorType" class="text-danger"></span>
</div>
答案 0 :(得分:1)
要进行下拉,您应该使用<select>
标签。您可以使用标记助手(<select>
)来填充asp-*
,非常简单。填充下拉列表的标准类型为SelectListItem
。视图将是这样的:
@page
@model IndexModel
<form method="post">
<select asp-items="@Model.StringItems" asp-for="@Model.SelectedString" />
<button type="submit">Submit</button>
</form>
页面模型:
public class IndexModel : PageModel
{
public IEnumerable<SelectListItem> StringItems { get; private set; }
[BindProperty]
public string SelectedString { get; set; }
public void OnGet()
{
// prepare the list in here
StringItems = new SelectListItem[]
{
new SelectListItem ("Text1", "Value1"),
new SelectListItem ("Text2", "Value2"),
new SelectListItem ("Text3", "Value3")
}
}
public void OnPost()
{
// use the selected item in post.
// it will be set in the SelectedString
}
}