【问题标题】:SelectListItem Dropdown not returning value to the controller?SelectListItem Dropdown 不向控制器返回值?
【发布时间】:2019-12-21 07:01:45
【问题描述】:

我有一个 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()
});

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

【问题讨论】:

  • 不,我实际上没有,你能发布我将如何使用它吗?
  • 您应该使用表单来代替该解决方案。问题是asp-route-groupType="@Model.GroupType.ToString()"。您的@Model.GroupType.ToString() 仅返回基本 ToString 如果没有被覆盖应该是 Enumerable GroupType / ClassName?
  • 哦,它在一个表单中,这就是为什么我认为它与我的 asp-route 有关,因为 userName 确实被传递给了控制器。我得到 groupType 的字符串 0。
  • 嗯好吧..尝试删除您的 asp-route-grouptype 并在您的控制器集中 string userName, GroupType GroupType 并将您的选择更改为 &lt;select asp-for="GroupType" asp-items="Model.Group"&gt;&lt;/select&gt;
  • 我试过了,没有运气,仍然发送 0。我为什么要删除 asp-route-grouptype?它将如何将该值发送给控制器?

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


【解决方案1】:

@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

【讨论】:

  • 看来我需要表单来提交值,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多