点击按钮禁用表单输入后,如何恢复文本框为绑定原始值?
解决方案:禁用表单时恢复输入框原始值
问题核心在于你仅维护了当前绑定的输入值,没有保存初始的原始状态副本,导致禁用时无法回滚到初始值。以下是具体实现方案:
完整代码实现
Razor 前端部分
<form id="formexample"> <div class="row g-5"> <div class="col"> <h5><strong>Informations</strong></h5> <br /> <!-- 切换禁用状态的按钮 --> <button type="button" class="btn btn-secondary mb-3" @onclick="ToggleDisable"> @(isDisabled ? "启用表单" : "禁用表单并恢复原始值") </button> <label class="form-label" for="">Sample Value</label> <input type="text" class="form-control" disabled="@isDisabled" @bind="@binded_value" placeholder="" style="margin-bottom:1rem"> <label for="exampleFormControlTextarea1">Remarks on the tool concept</label> <input type="text" class="form-control" disabled="@isDisabled" @bind="@second_binded_value" placeholder="" style="margin-bottom:1rem"> </div> </div> </form>
C# 逻辑部分
@code { // 当前绑定的输入值 private string binded_value { get; set; } = "初始Sample值"; private string second_binded_value { get; set; } = "初始Remarks值"; // 存储原始值的副本,用于恢复 private string original_binded_value { get; set; } private string original_second_binded_value { get; set; } private bool isDisabled { get; set; } protected override void OnInitialized() { // 组件初始化时保存初始原始值 original_binded_value = binded_value; original_second_binded_value = second_binded_value; } // 切换禁用状态的方法 private void ToggleDisable() { isDisabled = !isDisabled; // 禁用时将当前值重置为原始值 if (isDisabled) { binded_value = original_binded_value; second_binded_value = original_second_binded_value; } } }
关键说明
- 保存原始值副本:新增
original_前缀的变量,在组件初始化时记录输入框的初始值,确保禁用时能找到原始状态。 - 移除冗余事件:删除了原代码中的
@oninput事件,因为@bind已经实现了双向绑定,手动写@oninput会造成重复赋值,完全多余。 - 禁用时重置值:在切换禁用状态的方法中,判断如果是禁用操作,就把当前绑定值替换为原始值,输入框会自动同步显示原始内容。
额外注意事项
- 如果原始值是通过组件参数传入的,需要在
OnParametersSet方法中更新原始值,确保参数变化时原始状态同步更新:protected override void OnParametersSet() { original_binded_value = binded_value; original_second_binded_value = second_binded_value; } - 若需要支持多次编辑-恢复操作,仅在初始化或参数更新时更新原始值,启用表单时无需修改原始值。
内容的提问来源于stack exchange,提问作者C. Oezer
相关产品推荐
相关产品推荐

