首页 > 解决方案 > SelectListItem Dropdown 不向控制器返回值?

问题描述

我有一个 DropDownList 没有将选择的值返回给控制器。我在我的模型中将 SelectListItem 用于列表项和一个 GroupType,它是用于存储值的枚举的一部分。我正在使用 asp-route-groupType 将值返回给控制器。奇怪的是,这似乎与其他下拉菜单类似,但不是这个……我可以从模型中发送用户名(不是下拉菜单的一部分),但不能发送 groupType。我正在使用 ASP.NET Core 和实体框架。

我已经尝试更改放置 asp-route-groupId 的类型,但没有成功。

HTML:

<strong>@Html.DisplayNameFor(x => x.GroupType)</strong>
<select asp-for="GroupType">
@foreach (var opt in Model.Group)
{
    <option value="@opt.Value">@opt.Text</option>
}
</select>   
<br />
<a asp-action="ChangeGroup" asp-controller="Station" asp-route-userName="@Model.UserName" asp-route-groupType="@Model.GroupType.ToString()">Assign Group</a>

控制器:

public IActionResult ChangeGroup(string userName, string groupType)
{
    return RedirectToAction(nameof(ViewApp));
}

模型:

public class AdminViewApplicationViewModel
{
    public string UserName { get; set; }
    public List<SelectListItem> Group { get; set; }
    public GroupType GroupType { get; set; }
}

这就是我在管理器中为选择列表添加值的方式:

model.Group = new List<SelectListItem>();
model.Group.Add(new SelectListItem {
    Text = "Group1",
    Value = GroupType.Group1.ToString()
});
model.Group.Add(new SelectListItem {
    Text = "Group2",
    Value = GroupType.Group2.ToString()
});

控制器应返回从上述代码中描述的参数下拉列表中选择的值。

标签: c#htmlasp.net-corerazorentity-framework-core

解决方案


@Model.GroupType.ToString()选择值时不会改变,它总是等于从动作传递的值

您可以使用生成 GET 并提交选项值的表单

<form asp-action="ChangeGroup" asp-controller="Station" method="get">
<strong>@Html.DisplayNameFor(x => x.GroupType)</strong>
@Html.HiddenFor(model => model.UserName)
<select asp-for="GroupType">
    @foreach (var opt in Model.Group)
    {
        <option value="@opt.Value">@opt.Text</option>
    }
</select>
<br />
<input type="submit" value="Assign Group" />
</form>

您还可以在 javascript/jquery 事件中使用 onclick 获取值并提交它:

@Html.HiddenFor(model => model.UserName)
<strong>@Html.DisplayNameFor(x => x.GroupType)</strong>
<select id="gt">
    @foreach (var opt in Model.Group)
    {
        <option value="@opt.Value">@opt.Text</option>
    }
</select>
<br />
<a id="as" onclick="Assign()">Assign Group</a>
@section Scripts{
    <script type="text/javascript">
        function Assign() {
            var userName = $("#UserName").val();
            var groupType = $("#gt option:selected").val();
            console.log(userName);
            $.ajax({
                url: '/Station/ChangeGroup',
                type: 'Get',
                data: {
                    userName: userName, groupType: groupType
                },
                success: function () {

                },
                complete: function () {

                },
            });
        }
    </script>
}

请参阅使用按钮将选定的下拉值传递给控制器


推荐阅读