c# - 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()
});
控制器应返回从上述代码中描述的参数下拉列表中选择的值。
解决方案
@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>
}
推荐阅读
- r - 将 distinct() 与列名向量一起使用
- python - Sklearn train_test_split() 使用 python 3.7 对奇怪的行为进行分层
- ms-office - 在power bi中如何将数字转换为字符串
- mysql - 如何合并表并获取最新行
- reactjs - 在反应中调用api后设置状态
- javascript - ComponentDidUpdate - 超出最大更新深度 - 错误
- unity3d - Unity C#:从游戏对象(3D)到画布(屏幕空间 - 相机)的线渲染器
- sql - 如何在 Oracle 中分隔连接的字符串?
- f# - 面向铁路的编程和部分应用
- python - cronicle的插件有哪些参数以及如何添加?