Выберите 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();
}