MudSelect选择选项后错误验证状态自动消失的问题求助
解决MudSelect自动清除错误状态的问题
问题重现
使用MudBlazor v8.5.1的MudSelect组件,手动通过Error和ErrorText绑定控制错误提示:
<MudSelect @bind-Value="value" T="string" Label="Test Select" Error="@isInError" ErrorText="The field is in error"> @foreach(string option in options) { <MudSelectItem T="string" Value="@option">@option</MudSelectItem> } </MudSelect> <MudButton ButtonType="ButtonType.Button" OnClick="@Validate">Validate</MudButton> @code { private bool isInError = false; private string value = string.Empty; private List<string> options = ["opt1", "opt2", "opt3", "opt4"]; private void Validate() { if (value == string.Empty) { isInError = true; } } }
未选择选项时点击验证按钮,错误提示正常显示;但选择任意选项后,错误提示会自动消失,无法保持手动设置的错误状态,而同页面的MudTextField无此问题。
解决方案
MudSelect默认开启了*ResetErrorOnInput*参数(值为true),该参数会在用户选择选项时自动重置组件的错误状态。只需将此参数设置为false,即可阻止组件自动清除错误,仅通过手动修改isInError来控制错误状态:
<MudSelect @bind-Value="value" T="string" Label="Test Select" Error="@isInError" ErrorText="The field is in error" ResetErrorOnInput="false"> @foreach(string option in options) { <MudSelectItem T="string" Value="@option">@option</MudSelectItem> } </MudSelect> <MudButton ButtonType="ButtonType.Button" OnClick="@Validate">Validate</MudButton> @code { private bool isInError = false; private string value = string.Empty; private List<string> options = ["opt1", "opt2", "opt3", "opt4"]; private void Validate() { // 可自定义任意验证逻辑,不局限于是否为空 isInError = value == string.Empty || value == "opt2"; // 示例:选择opt2也标记错误 } }
复杂验证场景补充
如果需要统一管理表单验证逻辑,建议结合MudBlazor的EditForm和DataAnnotations体系,避免手动控制错误状态的繁琐:
<EditForm Model="@model" OnValidSubmit="@HandleValidSubmit"> <DataAnnotationsValidator /> <MudSelect @bind-Value="model.SelectedOption" T="string" Label="Test Select"> @foreach(string option in options) { <MudSelectItem T="string" Value="@option">@option</MudSelectItem> } </MudSelect> <ValidationMessage For="@(() => model.SelectedOption)" /> <MudButton ButtonType="ButtonType.Submit">Validate</MudButton> </EditForm> @code { private FormModel model = new(); private List<string> options = ["opt1", "opt2", "opt3", "opt4"]; private void HandleValidSubmit() { // 验证通过后的业务逻辑 } public class FormModel { [Required(ErrorMessage = "必须选择一个选项")] [RegularExpression(@"^(?!opt2$).*$", ErrorMessage = "不能选择opt2")] public string SelectedOption { get; set; } = string.Empty; } }
内容的提问来源于stack exchange,提问作者user21415940
相关产品推荐
相关产品推荐

