Blazor双向绑定用@bind:set报错,是否微软文档存在问题?
解决Blazor @bind:get/@bind:set的CS1503类型转换错误
这个问题不是微软文档的错误,核心是你定义的OnInput方法签名不符合@bind:set的要求,导致类型转换失败。
错误原因拆解
@bind:set只接受两种类型的方法:
- 同步场景:
Action<string?>(接受可空字符串参数的无返回值方法) - 异步场景:
Func<string?, Task>(接受可空字符串参数、返回Task的异步方法)
你遇到的CS1503错误,说明你的OnInput要么返回了EventCallback<string>,要么参数用了不可空的string,和@bind:set要求的类型不匹配。
正确写法示例
同步场景
@page "/test" <input @bind:event="oninput" @bind:get="inputValue" @bind:set="OnInput" /> @code { private string? inputValue; // 正确:参数为string?,无返回值 private void OnInput(string? value) { inputValue = value; // 这里可以加自定义逻辑,比如输入验证、状态同步等 } }
异步场景
如果需要处理异步逻辑(比如调用后端接口):
@page "/test" <input @bind:event="oninput" @bind:get="inputValue" @bind:set="OnInput" /> @code { private string? inputValue; // 正确:参数为string?,返回Task private async Task OnInput(string? value) { inputValue = value; await ValidateInputAsync(value); } private async Task ValidateInputAsync(string? value) { // 模拟异步验证操作 await Task.Delay(100); } }
常见错误写法(避坑)
以下是会触发该错误的典型写法:
- 错误返回
EventCallback类型:
// 错误!@bind:set不接受EventCallback private EventCallback<string> OnInput => EventCallback.Factory.Create<string>(this, value => inputValue = value);
- 参数使用非可空
string:
// 错误!输入框的值可能为null,必须用string? private void OnInput(string value) { inputValue = value; }
额外提示
确保你的项目基于**.NET 6或更高版本**,因为@bind:get和@bind:set是.NET 6才引入的语法特性,低版本框架不支持。
内容的提问来源于stack exchange,提问作者Moffen
相关产品推荐
相关产品推荐

