[英]How to update Enum value in ASP.NET Core MVC?
我正在尝试更新 Enum 值,它显示三个值的状态, Open, OnHold, Close
public enum TicketStatus
{
Otvoren = 1,
NaCekanju = 2,
Zatvoren = 3
}
我将此值分配给我的 Model 字段并给出默认值Open
public string Status { get; set; } = TicketStatus.Otvoren.ToString();
现在,当我想更新此值并从Open
更改为OnHold
或Close
时,问题就开始了
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Upsert(TicketVM ticketVM)
{
var users = _unitOfwork.ApplicationUser.GetAll(x => x.Id == x.UserName);
var userName = User.FindFirstValue(ClaimTypes.Email);
var user = HttpContext.User.Identity.Name;
if (ModelState.IsValid)
{
if (ticketVM.Ticket.Id == 0)
{
ticketVM.Ticket.ApplicationUser = _db.ApplicationUsers.FirstOrDefault(u => u.Email == userName);
ticketVM.Ticket.Status = TicketStatus.Otvoren.ToString();
_unitOfwork.Ticket.Add(ticketVM.Ticket);
}
else
{
ticketVM.Ticket.ApplicationUser = _db.ApplicationUsers.FirstOrDefault(u => u.Email == userName);
_unitOfwork.Ticket.Update(ticketVM.Ticket);
}
_unitOfwork.Save();
return RedirectToAction(nameof(Index));
}
return View(ticketVM);
}
这是应更新状态的 Upsert 方法。 到目前为止,我尝试的是:
方法一
if (ticketVM.Ticket.Status == "Otvoren")
{
ticketVM.Ticket.Status = TicketStatus.NaCekanju.ToString();
ticketVM.Ticket.Status = TicketStatus.Zatvoren.ToString();
}
else if (ticketVM.Ticket.Status == "NaCekanju")
{
ticketVM.Ticket.Status = TicketStatus.Otvoren.ToString();
ticketVM.Ticket.Status = TicketStatus.Zatvoren.ToString();
}
else if(ticketVM.Ticket.Status == "Zatvoren")
{
ticketVM.Ticket.Status = TicketStatus.Otvoren.ToString();
ticketVM.Ticket.Status = TicketStatus.NaCekanju.ToString();
}
方法二
if (status == "Otvoren")
{
status = TicketStatus.Otvoren.ToString();
}
else if (status == "NaCekanju")
{
status = TicketStatus.NaCekanju.ToString();
}
else if (status == "Zatvoren")
{
status = TicketStatus.Zatvoren.ToString();
}
方法三
switch (status)
{
case "Otvoren":
TicketStatus.Otvoren.ToString();
break;
case "NaCekanju":
TicketStatus.NaCekanju.ToString();
break;
case "Zatvoren":
TicketStatus.Zatvoren.ToString();
break;
}
这是我的 HTML 下拉菜单
<div class="form-group row">
<div class="col-4">
<label>Status Tiketa</label>
</div>
<div class="col-8">
<select asp-for="@Model.Ticket" asp-items="Html.GetEnumSelectList<VmSTicketing.Models.Enum.TicketStatus>()" class="form-control"></select>
</div>
</div>
Open
我的问题是:如何使用enum
下拉菜单更新值?
您的 HTML 没有发送任何票证状态值,并且 model 绑定器始终使用默认的初始化值。
将select
标记中的asp-for
从@Model.Ticket
为@Model.Ticket.Status
-
<select asp-for="@Model.Ticket.Status" asp-items="Html.GetEnumSelectList<VmSTicketing.Models.Enum.TicketStatus>()" class="form-control"></select>
这将为您提供设置给枚举成员的int
值的字符串表示形式。 您可以从中获取枚举字符串并将其设置为票证状态,例如 -
ticketVM.Ticket.Status = ((TicketStatus)Convert.ToInt32(ticketVM.Ticket.Status)).ToString();
另一种方法:
对于创建和编辑操作,在您的 controller 中,您具有返回视图的GET
方法。 使用您的枚举成员名称创建一个SelectList
并将其添加到ViewBag
-
public IActionResult Create()
{
ViewBag.StatusList = new SelectList(Enum.GetNames(typeof(TicketStatus)));
return View();
}
并在您的 HTML 中将select
标签更改为 -
<select asp-for="@Model.Ticket.Status" asp-items="ViewBag.StatusList" class="form-control"></select>
现在,您将在下拉列表中选择枚举成员名称作为ticketVM.Ticket.Status
中的 ticketVM.Ticket.Status 的值,您无需执行任何操作来设置此值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.