【发布时间】: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并将您的选择更改为<select asp-for="GroupType" asp-items="Model.Group"></select> -
我试过了,没有运气,仍然发送 0。我为什么要删除 asp-route-grouptype?它将如何将该值发送给控制器?
标签: c# html asp.net-core razor entity-framework-core