Skip to content

Commit 33287b3

Browse files
authored
fix(Form): dynamic removal of text fields may result in an error when reseting the form (#602)
* 因reset需要重置表单内容,无法使用foreach进行遍历.修正表单内,动态增减input,Validatable发生不一致的异常 * 修正ResetValidation * code review
1 parent 9b2a132 commit 33287b3

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

src/Component/BlazorComponent/Components/Form/BForm.razor.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ public void Register(IValidatable validatable)
8787
Validatables.Add(validatable);
8888
}
8989

90+
internal void Remove(IValidatable validatable)
91+
{
92+
Validatables.Remove(validatable);
93+
}
94+
9095
private async Task HandleOnSubmitAsync(EventArgs args)
9196
{
9297
var valid = Validate();
@@ -279,9 +284,9 @@ public void Reset()
279284
{
280285
EditContext?.MarkAsUnmodified();
281286

282-
foreach (var validatable in Validatables)
287+
for (int i = 0; i < Validatables.Count; i++)
283288
{
284-
validatable.Reset();
289+
Validatables[i].Reset();
285290
}
286291

287292
_ = UpdateValue(true);
@@ -291,9 +296,9 @@ public void ResetValidation()
291296
{
292297
EditContext?.MarkAsUnmodified();
293298

294-
foreach (var validatable in Validatables)
299+
for (int i = 0; i < Validatables.Count; i++)
295300
{
296-
validatable.ResetValidation();
301+
Validatables[i].ResetValidation();
297302
}
298303

299304
_ = UpdateValue(true);

src/Component/BlazorComponent/Components/Input/BInput.razor.Validatable.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,8 @@ protected override ValueTask DisposeAsyncCore()
517517
EditContext.OnValidationStateChanged -= HandleOnValidationStateChanged;
518518
}
519519

520+
Form?.Remove(this);
521+
520522
return base.DisposeAsyncCore();
521523
}
522524
}

0 commit comments

Comments
 (0)