Blazor 以一种方式将值绑定到“输入日期”

luk*_*sss 7 c# blazor

由于 Blazor 不支持停止事件传播,因此我需要对type="date"带有onchange事件处理程序和带有事件处理程序的输入元素进行单向绑定。

像这样的东西:

<input type="date" value="@_endDate" format-value="yyyy-MM-dd" onchange="@EndDate_change"/>
Run Code Online (Sandbox Code Playgroud)

但这不起作用。该页面包含 datePicker 但没有任何值。

“_endDate”是日期时间类型。

如果我使用双向绑定,那么一切正常。

<input type="date" bind="@_endDate" format-value="yyyy-MM-dd"/>
Run Code Online (Sandbox Code Playgroud)

知道为什么第一个“输入”不起作用吗?有什么错误还是这是blazor中的错误?对于带有 onchange 事件的纯文本单向绑定工作没有问题。

Edit1: _endDate 包含当前日期并设置为 DateTime.Now

protected void EndDate_change(UIChangeEventArgs endDateEvent)
{
    _endDate = Convert.ToDateTime(endDateEvent.Value);
    StateHasChanged();
}
Run Code Online (Sandbox Code Playgroud)

Wal*_*thi 15

要保留两者@onchange=和一种单向方式,value=请使用此

value="@someDate.ToString("yyyy-MM-dd")"

技巧是将格式设置为字符串yyyy-MM-dd以从值中获取单向绑定。以不同的方式设置格式或简单地使用DateTime对象无法在日期选择器内显示日期。

例子:

<input type="date" value="@knowledge.ActualShortTermDate.ToString("yyyy-MM-dd")" @onchange="@(async (e) => await updateDate(DateTime.Parse(e.Value.ToString())))" />


小智 0

自 .NET Core 3.1 Preview 2 起,Blazor 应用程序支持阻止事件的默认操作和停止事件传播,请 在此处查看此链接