Telerik UI for Blazor中TelerikEditor组件ValueChange事件疑似Bug求助
Telerik UI for Blazor Editor组件ValueChanged事件异常触发的原因分析
无限循环触发的核心原因
当你注释掉TheEditorContent = value这行代码时,编辑器会无限触发ValueChanged事件,本质是内容不匹配导致的循环校验:
- 初始绑定的
TheEditorContent是带CRLF换行的逐字HTML字符串,编辑器内部会自动对传入内容做标准化处理(比如把CRLF转换为LF、统一空<p>标签的格式等)。 - 处理后的内容和原始绑定的Value存在差异,编辑器会判定值发生了变化,触发ValueChanged事件。
- 但你没有更新绑定的
TheEditorContent,组件下一次渲染时,编辑器又会收到原始的带CRLF内容,再次执行标准化处理,再次触发ValueChanged,由此形成无限循环。
更新ViewModel后仅触发一次的原因
打开注释更新TheEditorContent = value后,循环停止,但点击编辑器仍会触发一次ValueChanged,原因是:
- 第一次触发ValueChanged时,你把编辑器处理后的标准化HTML同步给了ViewModel,后续编辑器接收到的就是它自己生成的标准化内容,和内部处理后的结果完全一致,不会再反复触发事件。
- 点击编辑器时触发的那一次,是编辑器获得焦点时的一次内容一致性校验——此时初始的原始内容和编辑器内部缓存状态还有细微格式差异,触发一次ValueChanged完成状态同步后,ViewModel和编辑器内部内容完全对齐,就不会再触发了。
复现代码
<TelerikEditor Value="@TheEditorContent" ValueChanged="@ValueChangedHandler"> </TelerikEditor> @TheEditorContent @code { string TheEditorContent { get; set; } = @"<div> <p>Paragraph 1</p> <p>Paragraph 2</p> <p>Paragraph 3</p> <p /> <p /> <p>Paragraph 4</p> </div>"; void ValueChangedHandler(string value) { // update the view-model //TheEditorContent = value; Console.WriteLine("ValueChanged fired"); } }
内容的提问来源于stack exchange,提问作者RicardoP
相关产品推荐
相关产品推荐

