【问题标题】:Values selected in dropdown not being passed to the controller在下拉列表中选择的值未传递给控制器
【发布时间】:2018-08-08 17:51:12
【问题描述】:

我按照Select Tag Helper in ASP.NET Core MVC 从方法调用中填充多选下拉列表,但我选择的值没有传递给控制器​​。

<form asp-controller="ApiController" asp-action="Usage">
<label asp-for="Api"></label>
<div>
    <select id="api" class="form-control" asp-for="Api" asp-items="@Model.Api">

    </select>
</div>
</form>

此下拉列表中的选项包含所有 API。

型号

public class Model
{
    public List<SelectListItem> Api { get; set; }
}

当我查看 action 方法时,模型的 Api 有一个 Null 值。

【问题讨论】:

标签: c# asp.net-core-mvc


【解决方案1】:

asp-for 标记包含所选项目,它不应与 asp-items 中的集合集相同。 所以在模型上添加一个新属性,它匹配 API 的 SelectListItems 的值类型集(在本例中使用 int),像这样

public class Model
{
    public int selectedApi { get; set; }
    public List<SelectListItem> Api { get; set; }
}

并在所选项目的选择标签上使用它

<select id="api" class="form-control" asp-for="selectedApi" asp-items="@Model.Api">
</select>

【讨论】:

  • 做了这个改变,但是控制器动作中selectedApiApi的值仍然是Null
  • 另外,我不能真正使用这种方法,因为将asp-for 更改为SelectListItem 会将我的下拉列表更改为单个选择下拉列表。我需要它是一个多选下拉菜单。
  • @JoshMuroe 你仍然需要模型中的 Api 值。更新了答案模型。您是否将 @model 链接到页面
  • 是的,我还有List&lt;SelectListItem&gt; Api。该模型链接到页面,因为我在页面上有其他输入字段并且它们被传递给控制器​​操作就好了。
  • @JoshMuroe 您需要将所选项目设置为 SelectListItem 值的值类型。更新了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多