我的下拉列表中没有选项?

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);
    }