Blazor中bind-Value绑定后EditForm无法更新变量问题求助
问题原因及解决方法
你的问题出在EditForm的属性绑定语法错误,导致表单没有正确关联到tmp实例,输入的值无法绑定到对应的属性上。
错误点
你在EditForm中写了:
<EditForm Model="tmp" OnSubmit = "OnSubmit" FormName="sample">
这里的Model和OnSubmit属性没有使用@符号,Blazor会将它们当作普通字符串处理,而不是绑定到你定义的C#变量和方法。因此表单无法关联到tmp实例,InputText的绑定自然失效,提交时tmp.CName和tmp.CDate始终为null。
修正后的代码
@using System.Text.Json; @page "/" <PageTitle>Home</PageTitle> <h1>Hello, world!</h1> <EditForm Model="@tmp" OnSubmit="@OnSubmit" FormName="sample"> <!-- 因为EditForm已经指定了Model,这里可以直接绑定属性名 --> <InputText @bind-Value="CName" /><br /> <InputText @bind-Value="CDate" /><br /> <button type="submit">Submit</button> </EditForm> <p>@tmp.CName changed at @tmp.CDate logged at @tmp.Date</p> @code { LogObject tmp = new LogObject(); public class LogObject{ public string Date {get; set;} public string CDate {get; set;} public string CName {get; set;} } public void OnSubmit(){ Console.WriteLine(tmp.CName + " at " + tmp.CDate); // 可选:记录提交时间 tmp.Date = DateTime.Now.ToString(); } }
关键修正说明
- 添加@符号绑定:将
Model="tmp"改为Model="@tmp",OnSubmit="OnSubmit"改为OnSubmit="@OnSubmit",让Blazor识别这是C#变量和方法的绑定。 - 简化InputText绑定:在EditForm内部,因为已经指定了
Model="@tmp",所以@bind-Value可以直接写属性名(如CName),无需加上tmp.,代码更简洁。 - 可选:在
OnSubmit方法中设置tmp.Date,记录提交时间,让页面提示信息更完整。
内容的提问来源于stack exchange,提问作者Daniel N.
相关产品推荐
相关产品推荐

