View 不 return 在 MVC post 上建模数据

View does not return Model data on post in MVC

我是 MVC 的新手并且 ASP.NETCore。我正在尝试创建一个页面,用户可以在其中将下拉列表中的员工 ID 分配给工单。一切看起来都很好,我在视图中获取了数据,但是当我按下分配按钮时,我没有在 HTTP Post.

模型中获取任何数据

视图模型

namespace AVI_IT.ViewModels

{ public class AdminPageViewModel {

    public Dictionary<int, List<SelectListItem>> dict { get; set; }

}

}

控制器

public class AdminPageController : Controller
{
    private readonly AvivDataContext _db;

    public AdminPageController(AvivDataContext db)
    {
        this._db = db;
    }
   
    public IActionResult Index()
    {
        AdminPageViewModel thisViewModel = new AdminPageViewModel();
        var employeeList = new List<SelectListItem>();
        var dict = new Dictionary<int, List<SelectListItem>>();


        foreach (Employee employee in _db.employee)
        {
            SelectListItem item = new SelectListItem();
            item.Value = employee.employeeID.ToString();
            item.Text = employee.employeeID.ToString();
            employeeList.Add(item);
        }
        foreach (HelpDeskViewModel helpDesk in _db.helpdesk)
        {
            if (helpDesk.empID == null)
            {
                thisViewModel.dict = dict;
                if(!dict.ContainsKey(helpDesk.ticketID))
                thisViewModel.dict.Add(helpDesk.ticketID, employeeList);
            }
        }


        return View(thisViewModel);
    }
    [HttpPost]
    public IActionResult Index(AdminPageViewModel thisViewModel)
    {
        if (!ModelState.IsValid)
        {
            return View(thisViewModel);
        }

        return RedirectToAction("Index");
    }

查看

@model AVI_IT.ViewModels.AdminPageViewModel

<fieldset>
@using (Html.BeginForm())
{
<form method="post">
    <table align="center">
        <tr>
            <td>
                <button class=" btn btn-primary">@Html.ActionLink("Create Role", "CreateRole", 
            "Administration")</button>
            </td>
            <td>
                <button class=" btn btn-primary" asp-action="Index" asp-controller="UserRoles">Manage 
           Roles</button>
            </td>
        </tr>
    </table>
    <table class="table table-striped">
        <thead>
            <tr>
                <th>Ticket Number</th>
                <th>Assign Employee</th>
            </tr>
        </thead>

        @foreach (var ticket in Model.dict)
        {
            <tr>
                <td>@ticket.Key</td>
                <td>@Html.DropDownListFor(Model => ticket.Value, new SelectList(ticket.Value, 
         "Value", "Text"), "Assign Employee", new { @class = "form-control" })</td>


            </tr>
        }
        <tr><td><button type="submit" class="btn btn-primary form-control">Assign</button></td></tr>
    </table>
</form>
}

</fieldset>

我被困在这里,非常感谢任何帮助。谢谢

您可以尝试将 public Dictionary<int, string> selecteddict { get; set; } 添加到您的 AdminPageViewModel,并将选定的数据传递给 selecteddict。这是一个演示:

型号:

public class AdminPageViewModel {
        public Dictionary<int, List<SelectListItem>> dict { get; set; }
        public Dictionary<int, string> selecteddict { get; set; }
    }

View(使用name="selecteddict[@ticket.Key]"将选中的数据绑定到selecteddict ):

<fieldset>
    @using (Html.BeginForm())
    {
        <form method="post">
            <table align="center">
                <tr>
                    <td>
                        <button class=" btn btn-primary">
                            @Html.ActionLink("Create Role", "CreateRole",
"Administration")
                        </button>
                    </td>
                    <td>
                        <button class=" btn btn-primary" asp-action="Index" asp-controller="UserRoles">
                            Manage
                            Roles
                        </button>
                    </td>
                </tr>
            </table>
            <table class="table table-striped">
                <thead>
                    <tr>
                        <th>Ticket Number</th>
                        <th>Assign Employee</th>
                    </tr>
                </thead>

                @foreach (var ticket in Model.dict)
                {
                    <tr>
                        <td>@ticket.Key</td>
                        <td>
                            <select class="form-control" id="ticket_Value" name="selecteddict[@ticket.Key]" asp-items=@ticket.Value>
                                <option value="">Assign Employee</option>    
                            </select>
                        </td>


                    </tr>
                }
                <tr><td><button type="submit" class="btn btn-primary form-control">Assign</button></td></tr>
            </table>
        </form>
    }

</fieldset>

操作:

public IActionResult TestDict(AdminPageViewModel m)
        {
            AdminPageViewModel m1 = new AdminPageViewModel
            {
                dict = new Dictionary<int, List<SelectListItem>>()
            {
                { 0,new List<SelectListItem> { new SelectListItem {  Value="01",Text="0one"},new SelectListItem {  Value="02",Text="0two"} ,new SelectListItem {  Value="03",Text="0three"}}},
                { 1,new List<SelectListItem> { new SelectListItem {  Value="11",Text="1one"},new SelectListItem {  Value="12",Text="1two"} ,new SelectListItem {  Value="13",Text="1three"}}},
                { 2,new List<SelectListItem> { new SelectListItem {  Value="21",Text="2one"},new SelectListItem {  Value="22",Text="2two"} ,new SelectListItem {  Value="23",Text="2three"}}},

            }
            };
            return View(m1);

        }

结果: