Microsoft.AspNetCore.Components.Forms.InputDate 需要 EditContext 类型的级联参数

fin*_*s10 7 asp.net-core asp.net5 blazor blazor-webassembly

我正在开发一个ASP.NET 5.0 blazor web assembly应用程序。我需要在仪表板屏幕中有一个日期选择器来选择一个日期来显示详细信息。

这是我的代码:

<input class="input" type="month" id="staffPicker" name="staffPicker"
        aria-label="Staff Sales Detail Period"
        @bind="StaffSaleDetailsPeriod"
        max="@DateTime.Now.ToString("yyyy-MM")">
Run Code Online (Sandbox Code Playgroud)

我需要在日期更改时触发 API 调用。所以我尝试添加@onchange到上面的代码中,如下所示。

<input class="input" type="month" id="staffPicker" name="staffPicker"
        aria-label="Staff Sales Detail Period"
        @bind="StaffSaleDetailsPeriod"
        max="@DateTime.Now.ToString("yyyy-MM")"
        @onchange="OnStaffSalePeriodChange">
Run Code Online (Sandbox Code Playgroud)

但这会产生新的错误,如下所示:

该元素使用属性“onchange”两次或多次。属性必须是唯一的(不区分大小写)。属性“onchange”由“@bind”指令属性使用。

所以我尝试将上面的input元素替换<InputDate>为如下所示,

<InputDate class="input is-small"
        ValueExpression="() => StaffSaleDetailsPeriod"
        Value="StaffSaleDetailsPeriod"
        ValueChanged="(DateTime staffSalesPeriod) => OnStaffSalePeriodChange()"
        max="@DateTime.Now.ToString("yyyy-MM")"/>
Run Code Online (Sandbox Code Playgroud)

这会产生运行时错误,如下所示:

EditForm 内的Microsoft.AspNetCore.Components.Forms.InputDate 1[System.DateTime] requires a cascading parameter of type EditContext. For example, you can use Microsoft.AspNetCore.Components.Forms.InputDate1[[System.DateTime, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]

缺少什么或者这<InputDate>不能与 EditForm 一起使用?有什么解决方法吗?

Isa*_*aac 5

<input class="input" type="month" id="staffPicker" name="staffPicker"
        aria-label="Staff Sales Detail Period"
        @bind="StaffSaleDetailsPeriod"
        max="@DateTime.Now.ToString("yyyy-MM")"
        @onchange="OnStaffSalePeriodChange">
Run Code Online (Sandbox Code Playgroud)

当您使用 @bind 编译器指令时,编译器会在幕后创建一些代码,其结果就像您执行了如下操作:

<input class="input" type="month" id="staffPicker" name="staffPicker"
            aria-label="Staff Sales Detail Period"
            value="StaffSaleDetailsPeriod"
            max="@DateTime.Now.ToString("yyyy-MM")"
            @onchange="@((args) => OnStaffSalePeriodChange=args.Value.ToString())">
Run Code Online (Sandbox Code Playgroud)

因此,如果您使用@bind,则无法使用@onchange指令,但您可以执行我上面所做的操作。

至于第二个问题:InputDate 组件必须嵌入到其 Model 属性EditContext 具有必要值的EditForm 中