如何将复选框绑定到可为空的字节字段?

How to bind checkboxes to nullable byte fields?

输入标签助手需要将复选框绑定到不可为 null 的布尔字段,但我的遗留 sql 表包含可为 null 的 tinyint 字段。现有数据为 1、0 或 Null。 Entity Framework 为模型中的这些字段生成可为 null 的 byte? 属性。我的剃刀页面直接绑定到生成的数据库模型。现在我想将复选框绑定到这些字段。有哪些选择?更改数据库是不可能的。

我应该在 razor 页面模型中匹配绑定的布尔属性吗?在 get/set 中,我可以 pull/push 将值转换为数据库模型的 byte? 字段。过去(使用非剃须刀 MVC)我将我的页面绑定到一个视图模型,生成的模型在 属性 中挂起。这让我可以绑定到控制器中的视图模型和 "fix" 数据问题。

我会尝试这个想法,但我想知道我是否走错了路?

编辑:我找到了一个解决方案,我将 post 作为答案。我最初的想法(上面)失败了(在 属性 get/set 中编码),因为当时数据库模型为空。相反,我在 OnGet 和 OnPost 例程中 pull/push 值。我仍然不确定这是否是解决问题的首选方法。

更新数据库模型中名为 OnChart 的可空字节字段:

 public byte? OnChart { get; set; }

在页面模型中创建对应的绑定布尔字段:

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

在 razor 页面绑定到 bool 属性:

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

然后您可以在 OnGet 和 OnPost 例程中将数据从 byte? 字段转换并移动到 bool(并返回)。在 OnGet 例程中:

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

然后在OnPost例程中:

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