我的下拉列表中没有选项?
No options coming up from my dropdown list?
我在我的控制器中创建了一个硬编码的下拉列表,我希望能够在其中创建一个选项,然后将其保存在我的数据库中。我的想法是,我应该能够创建一个工单,然后能够选择它是打开还是关闭。问题是,一旦创建票证,我就无法在我的视图中提出任何选项。当我更新工单时会显示选项。但是,一旦我更新了我的票,这些选项似乎也没有被保存。
用于创建的控制器,这是我的硬编码列表
public IActionResult Create(int? id)
{
TicketVM obj = new TicketVM();
obj.ProjectList = _db.Projects.Select(i => new SelectListItem
{
Text = i.Name,
Value = i.Project_Id.ToString()
});
if (id == null)
{
return View(obj);
}
// Status List
#region
List<SelectListItem> statusList = new List<SelectListItem>();
statusList.Add(new SelectListItem()
{
Value = "Open",
Text = "Open"
});
statusList.Add(new SelectListItem()
{
Value = "Closed",
Text = "Closed"
});
#endregion
// Status List End
if (obj == null)
{
return NotFound();
}
obj.Ticket = _db.Tickets.FirstOrDefault(u => u.Ticket_Id == id);
obj.StatusList = statusList;
return View(obj);
}
我的 Post 控制器执行创建/更新
// POST Create/Update
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(TicketVM obj)
{
if (obj.Ticket.Ticket_Id == 0)
{
_db.Tickets.Add(obj.Ticket);
}
else
{
_db.Tickets.Update(obj.Ticket);
}
_db.SaveChanges();
return RedirectToAction(nameof(Index));
}
这是我的观点
@model WebApplication20.Models.TicketVM
@{
Layout = "_Dashboard";
var title = "Create Ticket";
}
<html>
<body id="page-top">
<!-- Main Content -->
<form method="post">
<div class="row p-3 border">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Ticket.Ticket_Id" />
@if (Model.Ticket == null)
{
//edit
title = "Create Ticket";
}
else
{
title = "Update Ticket";
}
<div class="col-12 border-bottom">
<h2 class="text-primary">@title</h2>
</div>
<div class="col-8 pt-4">
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.TicketName"></label>
</div>
<div class="col-8">
<input asp-for="Ticket.TicketName" class="form-control" />
<span asp-validation-for="Ticket.TicketName" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.TicketDescription"></label>
</div>
<div class="col-8">
<textarea asp-for="Ticket.TicketDescription" rows="5" style="resize:none;" class="form-control"></textarea>
<span asp-validation-for="Ticket.TicketDescription" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.TicketCreated"></label>
</div>
<div class="col-8">
<input asp-for="Ticket.TicketCreated" class="form-control" />
<span asp-validation-for="Ticket.TicketCreated" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.Project_Id"></label>
</div>
<div class="col-8">
@Html.DropDownListFor(u => u.Ticket.Project_Id, Model.ProjectList, "--Project List--",
new { @class = "form-control" })
<span asp-validation-for="Ticket.Project_Id" class="text-danger"></span>
</div>
</div>
<!-- Status List-->
<div class="form-group">
<label asp-for="Ticket.TicketStatus" class="col-md-2"></label>
<div class="col-md-4 mx-auto">
<select asp-for="Ticket.TicketStatus" asp-items="@Model.StatusList" class="form-control">
<option disabeld selected>
--Select Status--
</option>
</select>
</div>
</div>
<!-- Status List End-->
<div class="form-group row">
<div class="col-4 offset-4">
@if (Model.Ticket == null)
{
<button type="submit" class="btn btn-primary form-control">Create</button>
}
else
{
<button type="submit" class="btn btn-primary form-control">Update</button>
}
</div>
<div class="col-4">
<a asp-controller="Project" asp-action="Details" class="btn btn-success form-control">Back to List</a>
</div>
</div>
</div>
</div>
</form>
<!-- End of Main Content -->
还为我的视图显示我的 ViewModel
public class TicketVM
{
public Ticket Ticket { get; set; }
public Ticket Ticket_Id { get; set; }
public IEnumerable<SelectListItem> ProjectList { get; set; }
public IEnumerable<SelectListItem> StatusList { get; set; }
public string TicketStatus { get; set; }
}
The problem is that I can not come up with any options in my view once I create a Ticket. Options are displayed when I do an Update on a Ticket. However, the options do not seem to be saved once I update my Ticket either.
您需要在if (id == null)
之前设置obj.StatusList = statusList;
。
修改后的代码如下:
public IActionResult Create(int? id)
{
TicketVM obj = new TicketVM();
List<SelectListItem> statusList = new List<SelectListItem>();
statusList.Add(new SelectListItem()
{
Value = "Open",
Text = "Open"
});
statusList.Add(new SelectListItem()
{
Value = "Closed",
Text = "Closed"
});
obj.ProjectList = _db.Projects.Select(i => new SelectListItem
{
Text = i.Name,
Value = i.Project_Id.ToString()
});
obj.StatusList = statusList;
if (id == null)
{
return View(obj);
}
if (obj == null)
{
return NotFound();
}
obj.Ticket = _db.Tickets.FirstOrDefault(u => u.Ticket_Id == id);
return View(obj);
}
我在我的控制器中创建了一个硬编码的下拉列表,我希望能够在其中创建一个选项,然后将其保存在我的数据库中。我的想法是,我应该能够创建一个工单,然后能够选择它是打开还是关闭。问题是,一旦创建票证,我就无法在我的视图中提出任何选项。当我更新工单时会显示选项。但是,一旦我更新了我的票,这些选项似乎也没有被保存。
用于创建的控制器,这是我的硬编码列表
public IActionResult Create(int? id)
{
TicketVM obj = new TicketVM();
obj.ProjectList = _db.Projects.Select(i => new SelectListItem
{
Text = i.Name,
Value = i.Project_Id.ToString()
});
if (id == null)
{
return View(obj);
}
// Status List
#region
List<SelectListItem> statusList = new List<SelectListItem>();
statusList.Add(new SelectListItem()
{
Value = "Open",
Text = "Open"
});
statusList.Add(new SelectListItem()
{
Value = "Closed",
Text = "Closed"
});
#endregion
// Status List End
if (obj == null)
{
return NotFound();
}
obj.Ticket = _db.Tickets.FirstOrDefault(u => u.Ticket_Id == id);
obj.StatusList = statusList;
return View(obj);
}
我的 Post 控制器执行创建/更新
// POST Create/Update
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(TicketVM obj)
{
if (obj.Ticket.Ticket_Id == 0)
{
_db.Tickets.Add(obj.Ticket);
}
else
{
_db.Tickets.Update(obj.Ticket);
}
_db.SaveChanges();
return RedirectToAction(nameof(Index));
}
这是我的观点
@model WebApplication20.Models.TicketVM
@{
Layout = "_Dashboard";
var title = "Create Ticket";
}
<html>
<body id="page-top">
<!-- Main Content -->
<form method="post">
<div class="row p-3 border">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Ticket.Ticket_Id" />
@if (Model.Ticket == null)
{
//edit
title = "Create Ticket";
}
else
{
title = "Update Ticket";
}
<div class="col-12 border-bottom">
<h2 class="text-primary">@title</h2>
</div>
<div class="col-8 pt-4">
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.TicketName"></label>
</div>
<div class="col-8">
<input asp-for="Ticket.TicketName" class="form-control" />
<span asp-validation-for="Ticket.TicketName" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.TicketDescription"></label>
</div>
<div class="col-8">
<textarea asp-for="Ticket.TicketDescription" rows="5" style="resize:none;" class="form-control"></textarea>
<span asp-validation-for="Ticket.TicketDescription" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.TicketCreated"></label>
</div>
<div class="col-8">
<input asp-for="Ticket.TicketCreated" class="form-control" />
<span asp-validation-for="Ticket.TicketCreated" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-4">
<label asp-for="Ticket.Project_Id"></label>
</div>
<div class="col-8">
@Html.DropDownListFor(u => u.Ticket.Project_Id, Model.ProjectList, "--Project List--",
new { @class = "form-control" })
<span asp-validation-for="Ticket.Project_Id" class="text-danger"></span>
</div>
</div>
<!-- Status List-->
<div class="form-group">
<label asp-for="Ticket.TicketStatus" class="col-md-2"></label>
<div class="col-md-4 mx-auto">
<select asp-for="Ticket.TicketStatus" asp-items="@Model.StatusList" class="form-control">
<option disabeld selected>
--Select Status--
</option>
</select>
</div>
</div>
<!-- Status List End-->
<div class="form-group row">
<div class="col-4 offset-4">
@if (Model.Ticket == null)
{
<button type="submit" class="btn btn-primary form-control">Create</button>
}
else
{
<button type="submit" class="btn btn-primary form-control">Update</button>
}
</div>
<div class="col-4">
<a asp-controller="Project" asp-action="Details" class="btn btn-success form-control">Back to List</a>
</div>
</div>
</div>
</div>
</form>
<!-- End of Main Content -->
还为我的视图显示我的 ViewModel
public class TicketVM
{
public Ticket Ticket { get; set; }
public Ticket Ticket_Id { get; set; }
public IEnumerable<SelectListItem> ProjectList { get; set; }
public IEnumerable<SelectListItem> StatusList { get; set; }
public string TicketStatus { get; set; }
}
The problem is that I can not come up with any options in my view once I create a Ticket. Options are displayed when I do an Update on a Ticket. However, the options do not seem to be saved once I update my Ticket either.
您需要在if (id == null)
之前设置obj.StatusList = statusList;
。
修改后的代码如下:
public IActionResult Create(int? id)
{
TicketVM obj = new TicketVM();
List<SelectListItem> statusList = new List<SelectListItem>();
statusList.Add(new SelectListItem()
{
Value = "Open",
Text = "Open"
});
statusList.Add(new SelectListItem()
{
Value = "Closed",
Text = "Closed"
});
obj.ProjectList = _db.Projects.Select(i => new SelectListItem
{
Text = i.Name,
Value = i.Project_Id.ToString()
});
obj.StatusList = statusList;
if (id == null)
{
return View(obj);
}
if (obj == null)
{
return NotFound();
}
obj.Ticket = _db.Tickets.FirstOrDefault(u => u.Ticket_Id == id);
return View(obj);
}