Blazor表单中输入框绑定int类型ID并自动填充名称是否可行?
完全可行,给你具体实现方案
核心思路是用一个中间字符串变量承接输入框的内容,既支持用户输入数字ID,失焦后又能显示查询到的名称,同时把对应的int类型ID绑定到Patient对象上。具体实现步骤如下:
- 新增字符串类型中间变量,绑定输入框以处理输入和名称显示
- 失焦时先尝试将输入内容转为int类型ID,用该ID查询患者名称
- 查询到名称后更新输入框显示内容,同时把ID赋值给
Patient的int类型属性 - 提交时确保
Patient的ID为有效int值
修改后的完整代码示例:
<EditForm EditContext="@editContext" OnValidSubmit="HandleValidSubmit"> <!-- 绑定中间变量,处理输入与显示 --> <input type="text" class="form-control" maxlength="8" @bind="inputValue" @bind:event="oninput" @onblur="lostFocus" /> <!-- 可选:显示ID字段的验证错误 --> <ValidationMessage For="@(() => patient.Id)" /> </EditForm> @code { private EditContext editContext; private Patient patient = new(); // 初始化Patient实例 private string inputValue = string.Empty; // 中间变量,绑定输入框 protected override void OnInitialized() { editContext = new EditContext(patient); } public void lostFocus() { // 尝试将输入内容转为int类型ID if (int.TryParse(inputValue, out int id)) { var foundPatient = PatientService.GetPatientByStudyID(id); if (foundPatient != null) { // 更新输入框显示患者名称 inputValue = foundPatient.Name; // 将ID赋值给Patient的int类型属性 patient.Id = id; } else { // 未查询到患者时的处理 inputValue = "未找到对应患者"; patient.Id = 0; // 重置ID } } else { // 输入非有效数字时的处理 inputValue = "请输入有效数字ID"; patient.Id = 0; } // 通知EditContext更新验证状态 editContext.NotifyFieldChanged(FieldIdentifier.Create(() => patient.Id)); } private void HandleValidSubmit() { if (editContext.Validate() && patient.Id != 0) { PatService.CreatePatient(patient); NavigationManager.NavigateTo("Studies", true); } } }
额外说明:
- 用
int.TryParse避免输入非数字内容时抛出异常 - 查询到患者后,同步更新输入框显示内容与
Patient对象的ID值,保证绑定的是正确的int类型数据 - 调用
editContext.NotifyFieldChanged确保表单验证状态及时更新 - 可根据业务需求调整未找到患者或输入无效时的提示逻辑
内容的提问来源于stack exchange,提问作者user10191234
相关产品推荐
相关产品推荐

