ASP.NET Core Razor页面-如何将列表项绑定到表单控件

时间:2019-08-08 01:42:00

标签: asp.net-core razor-pages

我想将字符串值的预定义列表绑定到表单控件,以使用户被迫从列表中进行选择,以适应于输入自己的值。在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>

1 个答案:

答案 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 
   }
}