这是一个奇怪的问题,我无法找到想要的解决方案。 我正在使用.net core 2.1。我有一个这样的订单视图模型:
public class OrdersFilterViewModel
{
[Display(Name = "Account Numbers:")]
public IEnumerable<SelectListItem> AccountNumbers { get; set; }
}
我的订单控制器中的viewmodel和SelectList
的调用方式如下:
var vm = new OrdersFilterViewModel
{
AccountNumbers = new SelectList(_context.Account.Where(m => m.UserID == userId), "AccountNumber", "AccountNumber", account)
};
return PartialView("_FilterOrders", vm);
问题在于尝试在如下所示的视图中获取下拉列表时:
<form asp-action="FilterOrders" asp-controller="Order" id="ordersFilterForm" method="post">
<div class="form-group">
<label asp-for="AccountNumbers" class="control-label"></label>
<select asp-for="AccountNumbers" class="form-control" asp-items="@Model.AccountNumbers">
</select>
</div>
<div class="form-group">
<input type="submit" value="Submit" class="btn btn-default" />
</div>
</form>
这有点奏效,但给了我一个textarea类型的显示,在浏览器中始终附加multiple = "multiple"
。我发现如果在我的视图模型中添加以下内容:
public int? AccountId { get; set; }
然后将我的视图更改为:
<select asp-for="AccountId" class="form-control" asp-items="@Model.AccountNumbers">
然后我可以得到我的下拉列表。但是,据我所知,我不需要该属性。我尝试了100万件事情,所以有可能我做了一些其他的细微改动,而我忘记了使它起作用,但这就是要点。
是否可以添加该额外属性?还是我不需要的东西就需要它?还是有什么方法可以设置multiple = "false"
或类似的东西,以便我可以使用原始的viewmodel等获得下拉列表?
我还没有将post
处理回控制器,所以也许这将揭示陷阱。我基本上是在尝试创建一个模态类型查询过滤器,除了修改某些参数并将其发送回我的查询以进行更新之外,它实际上并没有做其他事情。谢谢。
答案 0 :(得分:0)
是否可以添加该额外属性?还是我需要 我不知道的事吗?
是的,您需要这个额外的属性,因为在您选择的项目中有很多项目,并且用户将选择一个或多个项目,并且在服务器端,您需要知道用户选择了什么,这就是目的选择标签。
在multiple = "multiple"
的情况下,asp-for
取决于您在asp-for="AccountId"
中输入的内容,它是单个int值,因此不会使用多个,因为您有一个asp-for
中的数组,则它将使用倍数。
以下是有关选择标记帮助器的详细说明: Select Tag Helper in ASP.NET Core MVC