在我的为Create
方法专门创建的视图中,我需要在下拉列表中显示Name
的某些内容,并在选中后传递其Id
到控制器。
使用我的代码,我已经很接近了-但是,我不觉得这实际上是应该完成的方式。谨请您向我提供更有效的建议,我们非常欢迎任何提示和提示!
DependencyController.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中的列表。
Create.cshtml
<div class="form-group">
<label asp-for="ReleaseName"></label>
<select asp-items="@new SelectList(ViewBag.Releases)" asp-for="ReleaseName"></select>
</div>
上面是视图中的代码。我认为这是一个问题,因为我的列表如下所示:
他们的电话没问题,但是我想念什么?为什么没有显示他们的名字?
因此:
Intersection.Models.Release
,应该修正什么?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);
答案 0 :(得分:2)
您可以更改控制器辅助代码:
ViewBag.Releases = new SelectList(releaseList, "Id", "Name");
在客户端,您可以使用:
@Html.DropDownList("Id", (IEnumerable<SelectListItem>)ViewBag.Releases, null, new { @class ="form-control" })
答案 1 :(得分:2)
Gauravsa的答案是正确的,这是另一种方式。
<select asp-items="@(new SelectList(ViewBag.Releases, "Id", "Name"))" asp-for="Id"></select>
答案 2 :(得分:0)
您可以通过常规下拉菜单轻松获取
<div class="form-group">
@Html.DropDownList("Id",new SelectList(@ViewBag.Releases,"Id","Name"),"Select")
</div>