我有一个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()
});
控制器应返回从上面代码中描述的参数的下拉列表中选择的值。
答案 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