SelectListItem下拉列表没有向控制器返回值吗?

时间:2019-08-14 17:32:01

标签: c# html asp.net-core razor entity-framework-core

我有一个DropDownList,它没有向控制器返回选择的值。我在模型中为列表项使用SelectListItem,并使用GroupType,它是用于存储值的枚举的一部分。我正在使用asp-route-groupType将值返回给控制器。奇怪的是,这似乎对于其他下拉菜单也可以类似地起作用,但对于这个下拉列表却不起作用...我能够从模型(不是下拉列表的一部分)发送userName,但不能发送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()
});

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

1 个答案:

答案 0 :(得分:0)

@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>
}

请参阅Pass Selected Dropdown Value to Controller using a Button