繁体   English   中英

如何在包含数据库项目的视图中创建下拉列表?

[英]How to make a drop-down list in the view containing items from the database?

在我专门为Create方法创建的视图之一中,我需要在下拉列表中显示某些事物的Name ,并且一旦选择,将它们的Id传递给控制器​​。

使用我的代码我非常接近 - 但是,我不觉得这实际上是应该完成的方式。 我恳请您就什么可以更好地工作向我提供建议,非常欢迎任何提示和提示!

依赖控制器.cs

public IActionResult Create()
    {
        List<Release> releaseList = new List<Release>();
        List<Phase> phaseList = new List<Phase>();
        List<TaskModel> taskList = new List<TaskModel>();

        string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            string sql = "ReadReleases";
            SqlCommand command = new SqlCommand(sql, connection);
            command.CommandType = CommandType.StoredProcedure;

            using (SqlDataReader dataReader = command.ExecuteReader())
            {
                while (dataReader.Read())
                {
                    Release release = new Release();
                    release.Id = Convert.ToInt32(dataReader["Id"]);
                    release.Name = Convert.ToString(dataReader["Name"]);
                    releaseList.Add(release);
                }
            }

            ViewBag.Releases = releaseList;

这是来自控制器的Create方法的一小段。 基本上,我连接到数据库,通过存储过程Select * FROM Releases并填写最终存储在 ViewBag 中的列表。

创建.cshtml

        <div class="form-group">
            <label asp-for="ReleaseName"></label>
            <select asp-items="@new SelectList(ViewBag.Releases)" asp-for="ReleaseName"></select>
        </div>

以上是视图中的代码。 我认为这是一个问题,因为我的列表看起来像这样:

在此处输入图片说明

他们的号码没问题,但我错过了什么? 为什么不显示他们的名字?

所以:

  1. 为了让我的列表显示正确的名称而不是Intersection.Models.Release应该修复什么?
  2. 将所选项目传递给控制器​​时,还应该添加什么来获取Id而不是Name作为值?

编辑:

using (SqlConnection connection = new SqlConnection(connectionString))
        {
            string sql = "CreateDependency";

            using (SqlCommand command = new SqlCommand(sql, connection))
            {
                command.CommandType = CommandType.StoredProcedure;

                SqlParameter parameter = new SqlParameter
                {
                    ParameterName = "@ReleaseId",
                    Value = dependency.ReleaseId,
                    SqlDbType = SqlDbType.Int,
                    Size = 50
                };
                command.Parameters.Add(parameter);

您可以更改控制器端代码:

ViewBag.Releases = new SelectList(releaseList, "Id", "Name");

在客户端,您可以使用:

@Html.DropDownList("Id", (IEnumerable<SelectListItem>)ViewBag.Releases, null, new { @class ="form-control" })

Gauravsa 的回答是正确的,这是另一种方法。

<select asp-items="@(new SelectList(ViewBag.Releases, "Id", "Name"))" asp-for="Id"></select>

您可以通过使用常规下拉菜单轻松获取此信息

<div class="form-group">
@Html.DropDownList("Id",new SelectList(@ViewBag.Releases,"Id","Name"),"Select")
</div> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM