![](/img/trans.png)
[英]ASP.NET Core -> Label asp-for not returning label text
[英]asp-for in checkbox throws and error in asp.net core
在这里我使用了两个复选框
<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>
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>
任何帮助都将由衷感谢。 谢谢
这是因为当输入类型为checkbox
, asp-for
总是需要一个布尔参数,或者一个可以解析为 boolean 的字符串参数。
这SendReport
,假设SendReport
和SendInvoice
不是布尔值:
意外的“asp-for”表达式结果类型“System.Nullable”
您必须将这些参数更改为默认情况下为 false 的布尔参数,或者更改为默认情况下包含"false"
或"true"
的字符串参数。
我在使用 EFcore 时遇到了同样的问题。 从数据库中,我有:
namespace Project.EFCoreModels;
public partial class Account
{
public int AccountId {get; set;}
public bool? HasSaleTax {get; set;}
}
我想将HasSalesTax
显示为带有 asp 标签助手的复选框输入:
<input type="checkbox" asp-for="HasSaleTax" class="form-control" />
这会引发错误,因为输入类型复选框不接受可为空值。 很公平。
为了解决这个问题,我创建了另一个部分类,具有相同的命名空间,但位于不同的项目目录(文件夹)上。 当我们想要将 MetaData 添加到 EFCore 类时,这是 .NetCore MVC 中的常见模式。
namespace Project.EFCoreModels;
public partial class Account
{
public bool SalesTaxInput
{
get => this.HasSaleTax.GetValueOrDefault();
set {this.HasSaleTax = value;}
}
}
然后在视图上,您只需将输入与新创建的道具绑定:
<input type="checkbox" asp-for="SalesTaxInput" class="form-control" />
这是一个问题:
asp-for="SendReport"
。 这是无效的,因为标签是复选框类型的输入,所以asp-for
需要一个boolean
而您发送的不是布尔值。
发生时使用位数据类型为 reparent
true, false
但列允许空检查
您可以通过两种方式修复
第一:设置不允许为空或删除?
在归档
例子:
public bool? SendReport {get; set; }
// change to below code
public bool SendReport {get; set; }
第二:您可以使用普通的html标签进行复选框输入
<input type="checkbox" id="SendReport" name="SendReport" @((Model.SendReport== false ? "" : "checked")) />
如果你使用一个
@Html.EditorFor(m => m.SendReport, new { @class = "form-control" }}
它会给你一个带有选项的下拉框
<select id="SendReport" name="SendReport" class="list-box tri-state">
<option value="">Not Set</option>
<option value="true">True</option>
<option value="false">False</option>
</select>
至少我在使用 Bootstrap 4 和 Visual Studio 2019 时使用 .NET Core 3.1
任何遇到这个 MVC 核心的人都会放弃“for”@Html.CheckBox("tblSubCategory.Enabled",Model.tblSubCategory.Enabled.HasValue?Model.tblSubCategory.Enabled:false)
tblSubCategory 是视图上的子 model,Enabled 是可为空的 boolean
只是删除? 不工作。 对我来说,当我围绕一个 div claaa=checkbox 工作时
<div class="form-group">
<label asp-for="IsDeleted" class="control-label"></label>
<div class="col-md-10">
<div class="checkbox">
<input asp-for="IsDeleted" class="form-check" />
<span asp-validation-for="IsDeleted" class="text-danger"></span>
</div>
</div>
</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.