Выберите TagHelper, используя список из ViewBag

В настоящее время я пытаюсь использовать taghelpers в asp.net 5. Я хочу использовать помощник выбора тега со списком из ViewBag. Все, что я помещаю в поле 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 ответа

Решение

Если вы не хотите 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>

Надеюсь, это поможет!

asp-for просто должен быть свойством с текущим выбранным значением, а asp-items должен быть

IEnumerable<SelectListItem>

этот фрагмент из рабочего кода в моем проекте:

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

в моей модели я использую

IList<SelectListItem> 

для доступных стран

Ты можешь попробовать вот так...

@Html.DropDownListFor(model => model.Id_TourCategory, new SelectList(ViewBag.TourCate, "Value", "Text"))

 public ActionResult TourPackage()
    {
        List<TourCategory> lst = new List<TourCategory>();
        lst = db.TourCategories.ToList();
        ViewBag.TourCate = new SelectList(lst, "Id", "CategoryName");          
        return View();
    }
Другие вопросы по тегам