Я пытаюсь следовать примеру кода здесь , но я, должно быть, упускаю что-то очевидное.Вместо того, чтобы читать параметры списка выбора из источника данных, я просто пытаюсь загрузить их в конструктор.Но я получаю сообщение об ошибке
InvalidOperationException: Could not create an instance of type 'Microsoft.AspNetCore.Mvc.Rendering.SelectList'. Model bound complex types must not be abstract or value types and must have a parameterless constructor. Alternatively, set the 'SearchOptions' property to a non-null value
Вот код CS:
public class TestSelectModel : PageModel
{
private List<SelectListItem> _searchoptions;
[BindProperty(SupportsGet = true)]
public SelectList SearchOptions { get; set; }
public TestSelectModel()
{
_searchoptions = new List<SelectListItem>();
_searchoptions.Add(new SelectListItem("By Email", "By Email", true));
_searchoptions.Add(new SelectListItem("By Request Name", "By Request Name", false));
}
public void OnGet()
{
SearchOptions = new SelectList(_searchoptions, "Key", "Value", "By Email");
}
}
А вот код cshtml:
<h2>TestSelect</h2>
<form>
<div>
<select asp-items="Model.SearchOptions">
<option value="">Choose an search method</option>
</select>
<input type="submit" value="Filter" />
</div>
</form>
У меня такое чувствоэто что-то легкое, но я просто не вижу этого.
EDIT
В комментарии также пробовал приведенный ниже код, который запускает функцию OnGet (), но выдает NullReferenceException: Object reference not set to an instance of an object
.
private List<SelectListItem> _searchoptions;
public SelectList SearchOptions { get; set; }
[BindProperty(SupportsGet = true)]
public string BoundSearchField { get; set; }
public TestSelectModel()
{
_searchoptions = new List<SelectListItem>();
_searchoptions.Add(new SelectListItem("By Email", "By Email", true));
_searchoptions.Add(new SelectListItem("By Request Name", "By Request Name", false));
}
public void OnGet()
{
SearchOptions = new SelectList(_searchoptions, "Key", "Value", "By Email");
}
<form>
<div>
<select name="BoundSearchField" asp-items="Model.SearchOptions">
<option value="">Choose an search method</option>
</select>
<input type="submit" value="Filter" />
</div>
</form>