繁体   English   中英

复选框中的 asp-for 抛出和 asp.net 核心中的错误

[英]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>


任何帮助都将由衷感谢。 谢谢

这是因为当输入类型为checkboxasp-for总是需要一个布尔参数,或者一个可以解析为 boolean 的字符串参数

SendReport ,假设SendReportSendInvoice不是布尔值:

意外的“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而您发送的不是布尔值。

参考这个:
Asp.net MVC 将复选框数据放入布尔值列表中

发生时使用数据类型为 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM