Пожалуйста, попробуйте простой код следующим образом:
from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()
Перед тем, как вы нарисуете, вам нужно установить размер фигуры.
Похоже, проблема была в том, как были определены SelectList
и SelectListItems
. В режиме отладки они выглядели нормально, но я думаю, что проблема была в том, когда рендеринг пытался произойти. Вот что сработало. Обратите внимание на изменение, когда я добавил определения Text
и Value
для элементов, а затем скопировал их при загрузке списка. Также обратите внимание, что мне пришлось использовать связанное поле, чтобы сохранить выбор пользователя после публикации. Мне действительно любопытно, как это не было нужно в примере Razor, на который я ссылался .
public TestSelectModel()
{
_searchoptions = new List<SelectListItem>();
_searchoptions.Add(new SelectListItem() { Text = "By Email", Value = "1", Selected = true });
_searchoptions.Add(new SelectListItem() { Text = "By Request Name", Value = "2", Selected = false });
}
public void OnGet()
{
if(BoundSearchField is null)
{
BoundSearchField = "1";
}
SearchOptions = new SelectList(_searchoptions, "Value", "Text", BoundSearchField);
}
Ответ на исходный вопрос
Почему я получаю эту ошибку
blockquote>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
Имеет атрибут
BindProperty
в вашем свойствеSearchOptions
попытается привязать данные заголовка к вашемуSelectList
. Удалите атрибут BindPropery из списка выбора и создайте свойство для получения выбранного значения.Ответ на вопрос в вашем редактировании
Теперь я получаю сообщение об ошибке
blockquote>NullReferenceException: Object reference not set to an instance of an object
Это потому, что
"Key"
должно быть"Text"
Измените
SearchOptions = new SelectList(_searchoptions, "Key", "Value", "By Email");
наSearchOptions = new SelectList(_searchoptions, "Text", "Value", "By Email");
Полный код:
private List<SelectListItem> _searchoptions; // [BindProperty(SupportsGet = true)] // Remove this here public SelectList SearchOptions { get; set; } // Add a property to receive your selected value [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() { // Change "Key" to "Text" SearchOptions = new SelectList(_searchoptions, "Text", "Value", "By Email"); }
Затем добавьте
name="BoundSearchField"
в свой .cshtml<form> <div> <select name="BoundSearchField" asp-items="Model.SearchOptions"> <option value="">Choose an search method</option> </select> <input type="submit" value="Filter" /> </div> </form>