SelectList下拉列表显示当前视图模型的倍数=“倍数”

时间:2019-03-30 10:48:39

标签: asp.net-core .net-core

这是一个奇怪的问题,我无法找到想要的解决方案。 我正在使用.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处理回控制器,所以也许这将揭示陷阱。我基本上是在尝试创建一个模态类型查询过滤器,除了修改某些参数并将其发送回我的查询以进行更新之外,它实际上并没有做其他事情。谢谢。

1 个答案:

答案 0 :(得分:0)

  

是否可以添加该额外属性?还是我需要   我不知道的事吗?

是的,您需要这个额外的属性,因为在您选择的项目中有很多项目,并且用户将选择一个或多个项目,并且在服务器端,您需要知道用户选择了什么,这就是目的选择标签。

multiple = "multiple"的情况下,asp-for取决于您在asp-for="AccountId"中输入的内容,它是单个int值,因此不会使用多个,因为您有一个asp-for中的数组,则它将使用倍数。

以下是有关选择标记帮助器的详细说明: Select Tag Helper in ASP.NET Core MVC