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)
任何帮助将衷心感谢。谢谢
当发生时,使用位 数据类型 进行重新父级
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)
这是因为asp-for是总是期待一个布尔参数时输入的类型是checkbox,或可被解析为布尔字符串参数。
这就是说SendReport,假设和SendInvoice不是布尔值:
意外的“asp-for”表达式结果类型“System.Nullable”
您必须将这些参数更改为默认情况下为 false 的布尔参数,或更改为包含"false"或"true"默认情况下的字符串参数。