首页 > 解决方案 > 尝试返回 SelectListItem 下拉列表的视图模型

问题描述

这是我的控制器

    [HttpGet]
    public IActionResult Unregister(LinkedServiceTable lst)
    {
        lst.BuildLinkedServices();
        var model = new LinkedServiceTableViewModel
        {
            LinkedServices = GetLinkedServices(lst)
        };
        return View(model);
    }

    [HttpPost]
    public IActionResult Unregister(LinkedServiceTableViewModel vm)
    {
        return View(vm);
    }

    private IEnumerable<SelectListItem> GetLinkedServices(LinkedServiceTable lst)
    {
        var roles = lst.LinkedServices.Select(x => new SelectListItem
        {
            Value = x.LinkedServiceId.ToString(),
            Text = x.ServiceName
        });
        return new SelectList(roles, "Value", "Text");
    }

这是我的剃刀观点

@model CDIWeb.ViewModels.LinkedServiceTableViewModel
@{
    ViewData["Title"] = "Unregister Linked Service";
}

<h2>@ViewData["Title"]</h2>

<form action="/LinkedService/Unregister" method="post">
    @Html.LabelFor(m => m.SelectedLinkedServiceId)
    @Html.DropDownListFor(m => m.SelectedLinkedServiceId, Model.LinkedServices)
    <button type="submit" value="Submit">Submit</button>
</form>

我要做的就是提交 myrazor 视图,然后在选中下拉列表中的已提交选项的情况下重定向回同一页面。但是,我在HttpPost视图中收到此错误,HttpGet视图工作正常并且我能够成功提交。

InvalidOperationException:具有键“SelectedLinkedServiceId”的 ViewData 项属于“System.Int32”类型,但必须属于“IEnumerable<SelectListItem>”类型。

关于为什么会发生这种情况以及如何解决它的任何想法?

标签: asp.netasp.net-mvc-4razorasp.net-core.net-core

解决方案


问题是您将需要再次用数据填充 DropDownList,因为这些数据不会在回发之间持续存在。

[HttpPost]
public IActionResult Unregister(LinkedServiceTableViewModel lst)
{
    // Do something, and display the page again with data.

    lst.BuildLinkedServices();
    lst.LinkedServices = GetLinkedServices(lst);
    return View(lst);
}

推荐阅读