从ViewBag中选择TagHelper使用List

时间:2015-08-04 08:37:17

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

我目前正在尝试在asp.net 5中使用taghelpers。我想使用带有ViewBag列表的select标签帮助器。我放入asp-for字段的任何内容都会给我一个错误,因为它试图从IEnumerable的模型中取出它而不是视图包。

我想替换它:

@model IEnumerable<InvoiceIT.Models.Invoice>
@using (Html.BeginForm())
{
    <p>            
        @Html.DropDownList("Companies", String.Empty)       
        <input type="submit" value="Filter" class="btn btn-default" />
    </p>
}

用这个:

@model IEnumerable<InvoiceIT.Models.Invoice>
<form asp-controller="Invoice" asp-action="Index" method="post" class="form-horizontal" role="form">
    <select asp-for="????" asp-items="ViewBag.Companies" class="form-control">
    </select>
    <input type="submit" value="Save" class="btn btn-default" />
</form>

以下是我如何填充控制器中的选择列表:

ViewBag.Companies = new SelectList(await DbContext.Company.ToListAsync(), "CompanyID", "Name");

3 个答案:

答案 0 :(得分:9)

如果您不希望asp-for属性直接从Model提取,则可以通过提供@来覆盖该行为。

又名:

<select asp-for="@ViewBag.XYZ">
    ...
</select>

因此,根据你的说法,我相信你的一点点:

@model IEnumerable<InvoiceIT.Models.Invoice>
<form asp-controller="Invoice" asp-action="Index" method="post" class="form-horizontal" role="form">
@{
    SelectList companies = ViewBag.Companies;
    var currentlySelectedIndex = 0; // Currently selected index (usually will come from model)
}
    <select asp-for="@currentlySelectedIndex" asp-items="companies" class="form-control">
    </select>
    <input type="submit" value="Save" class="btn btn-default" />
</form>

希望这有帮助!

答案 1 :(得分:3)

asp-for只需要是具有当前所选值的属性,并且asp-items需要是

IEnumerable<SelectListItem>

此代码段来自我项目中的工作代码:

<select id="CompanyCountry" asp-for="CompanyCountry"
           asp-items="Model.AvailableCountries" class="form-control"></select>

在我的模型中我使用

IList<SelectListItem> 

for AvailableCountries

答案 2 :(得分:0)

你可以这样试试......

could not find function "%between%"