如何在 C# 中从 SQL table 填充下拉列表

How to populate a drop-down list from a SQL table in C#

我的 SQL 数据库中有一个 table,并在 ASP.NET 核心上使用 MVC:

CREATE TABLE [dbo].[ProgramVersion] (
    [ID]       INT          IDENTITY (1, 1) NOT NULL,
    [Ver]      VARCHAR (10) NOT NULL,
    [Released] DATETIME     NOT NULL
);

很简单。我有一个脚手架 Edit.cshtml 文件,有一个用于编辑来自不同 table 的记录的表单。我只想使用 ProgramVersion table 中的记录来填充 HTML select 输入(即下拉列表)。

  1. 如何执行一个简单的查询来得到结果集?
  2. 如何遍历结果集并简单地将 'Ver' 字符串值放入下拉列表的选项标签中?

(在 PHP 中,这非常简单,但 C# 真的让我很沮丧。)

首先,您创建一个视图模型,它可以在您的操作方法和视图之间传输数据。为此添加 2 个属性,一个用于传递所需的选项列表,一个用于保存所选选项值

public class CreateVm
{
   public List<SelectListItem> Items { set;get;}
   public int SelectedItemId { set;get;}
}

现在在您的 GET 操作中,为此创建一个对象,加载 Items 属性并将其传递给视图

public ActionResult Create()
{
   var vm = new CreateVm();

   //Load the Items property by reading the ProgramVersion table data
   vm.Items = db.ProgramVersions
               .Select(x=>new SelectListItem { Value=x.Id.ToString(),
                                               Text=x.Ver} )
               .ToList();
   return View(vm);
}

现在在你的视图中,它是强类型的视图模型,你可以使用 DropDownListFor hepler 方法

@model CreateVm
@using(Html.BeginForm())
{
  @Html.DropDownListFor(s=>s.SelectedItemId,Model.Items,"Select one")
  <input type="submit" />
}

您可以在 HttpPost 操作方法中使用相同的视图模型作为参数

[HttpPost]
public ActionResult Create(CreatVm model)
{
   // check model.SelectedItemId
   // to do : return something
}