复选框中的 asp-for 抛出并在 asp.net 核心中出错

red*_*r71 3 c# asp.net-core-2.0 razor-pages

在这里我使用了两个复选框

<label asp-for="SendReport" class="checkbox-inline"><input type="checkbox" asp-for="SendReport" />Send Report</label><br>
<label asp-for="SendInvoice" class="checkbox-inline"><input type="checkbox" asp-for="SendInvoice" />Send Invoice</label><br>
Run Code Online (Sandbox Code Playgroud)

和 checboc 的数据类型即asp-for="SendReport" and asp-for="SendInvoice"bit.
现在的问题是,当我尝试加载页面时,它会抛出如下错误

Unexpected 'asp-for' expression result type 'System.Nullable`1[[System.Boolean, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]' for <input>. 'asp-for' must be of type 'System.Boolean' or 'System.String' that can be parsed as a 'System.Boolean' if 'type' is 'checkbox'.<br>
Run Code Online (Sandbox Code Playgroud)


任何帮助将衷心感谢。谢谢

Zan*_*lal 7

当发生时,使用 数据类型 进行重新父级true, false列允许检查空值

您可以通过两种方式修复

第一?:在字段中设置不允许为空或删除

例子:

public bool? SendReport {get; set; } 
// change to below code 
public bool SendReport {get; set; } 
Run Code Online (Sandbox Code Playgroud)

第二:可以使用普通的html标签进行复选框输入

<input type="checkbox" id="SendReport" name="SendReport" @((Model.SendReport== false ? "" : "checked")) />
Run Code Online (Sandbox Code Playgroud)


小智 6

我在使用 EFcore 时遇到了同样的问题。从数据库中,我有:

namespace Project.EFCoreModels;
public partial class Account 
{
    public int AccountId {get; set;}
    public bool? HasSaleTax {get; set;}    
}
Run Code Online (Sandbox Code Playgroud)

我想HasSalesTax使用 asp 标签助手显示为复选框输入:

<input type="checkbox" asp-for="HasSaleTax" class="form-control" />
Run Code Online (Sandbox Code Playgroud)

这会引发错误,因为输入类型复选框不接受可为空值。很公平。

为了解决这个问题,我创建了另一个部分类,具有相同的命名空间,但位于不同的项目目录(文件夹)上。当我们想要将元数据添加到 EFCore 类时,这是 .NetCore MVC 中的常见模式。

namespace Project.EFCoreModels;
public partial class Account 
{         
    public bool SalesTaxInput 
    {
        get => this.HasSaleTax.GetValueOrDefault(); 
        set {this.HasSaleTax = value;} 
    }    
}
Run Code Online (Sandbox Code Playgroud)

然后在视图上,只需将输入与新创建的 prop 绑定即可:

 <input type="checkbox" asp-for="SalesTaxInput" class="form-control" />
Run Code Online (Sandbox Code Playgroud)


Bar*_*r J 5

这是因为asp-for总是期待一个布尔参数时输入的类型是checkbox或可被解析为布尔字符串参数

这就是说SendReport,假设和SendInvoice不是布尔值:

意外的“asp-for”表达式结果类型“System.Nullable”

您必须将这些参数更改为默认情况下为 false 的布尔参数,或更改为包含"false""true"默认情况下的字符串参数。