Как привязать флажки к обнуляемым байтовым полям? - PullRequest
0 голосов
/ 01 ноября 2019

Помощники по тегам ввода требуют, чтобы флажки были привязаны к необнуляемым логическим полям, но мои старые таблицы sql содержат пустые поля tinyint. Существующие данные: 1, 0 или ноль. Entity Framework генерирует нулевые свойства byte? для этих полей в модели. Моя страница бритвы связана непосредственно с созданной моделью базы данных. Теперь я хочу привязать флажки к этим полям. Какие варианты доступны? Смена базы данных невозможна.

Нужно ли сопоставлять связанные логические свойства в модели страницы бритвы? В get / set я мог получить / перенести преобразованные значения в поля byte? модели базы данных. В прошлом (используя не бритвенный MVC) я связывал свою страницу с моделью представления, а сгенерированная модель свисала с нее в свойстве. Это позволило мне привязаться к модели представления и «исправить» проблемы с данными в контроллере.

Я попробую эту идею, но мне интересно, иду ли я по неверному пути?

РЕДАКТИРОВАТЬ: Я нашел решение, которое я опубликую в качестве ответа. Моя первоначальная идея (выше) не удалась (кодирование в свойстве get / set), потому что модель базы данных в то время была нулевой. Вместо этого я извлекаю / толкаю значения в подпрограммах OnGet и OnPost. Тем не менее я не уверен, является ли предпочтительным способом решения проблемы.

1 Ответ

0 голосов
/ 01 ноября 2019

Чтобы обновить нулевое байтовое поле с именем OnChart в модели базы данных:

 public byte? OnChart { get; set; }

Создайте соответствующее связанное логическое поле в модели страницы:

 [BindProperty]
 public bool OnChartBoolean { get; set; }

В привязке страницы бритвыв свойство bool:

<input asp-for="OnChartBoolean" type="checkbox" class="form-check-input" >

Затем можно преобразовать и переместить данные из поля byte? в bool (и обратно) в подпрограммах OnGet и OnPost. В подпрограмме OnGet:

        if (myTable.OnChart == null || myTable.OnChart == 0)
        {
            OnChartBoolean = false;
        }
        else 
        {
            OnChartBoolean = true;
        }

Затем в подпрограмме OnPost:

    if (OnChartBoolean == false)
    {
        myTable.OnChart = 0;
    }
    else
    {
        myTable.OnChart = 1;
    }
...