Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
531662e
Fix warning when using nullable properties in ValidationMessageStore.…
BharatRamsf3693 May 27, 2026
11bc4d5
Merge branch 'dotnet:main' into main
BharatRamsf3693 May 29, 2026
3c7646d
Merge branch 'main' into main
BharatRamsf3693 May 31, 2026
512aa87
Merge branch 'main' into main
BharatRamsf3693 Jun 1, 2026
9ca04a2
Merge branch 'main' into main
BharatRamsf3693 Jun 1, 2026
e1908b1
Merge branch 'main' into main
BharatRamsf3693 Jun 2, 2026
c0cb702
Merge branch 'main' into main
BharatRamsf3693 Jun 3, 2026
249c338
Merge branch 'main' into main
BharatRamsf3693 Jun 5, 2026
561987b
Merge branch 'main' into main
BharatRamsf3693 Jun 5, 2026
b30f19d
Merge branch 'main' into main
BharatRamsf3693 Jun 8, 2026
7f0f703
Refactor comments in ValidationMessageStoreTest
BharatRamsf3693 Jun 11, 2026
7769e54
Merge branch 'main' into main
BharatRamsf3693 Jun 11, 2026
d7401f8
Refactor comments in ValidationMessageStoreTest
BharatRamsf3693 Jun 11, 2026
c2751fb
Merge branch 'main' into main
BharatRamsf3693 Jun 11, 2026
3e63a92
Merge branch 'main' into main
BharatRamsf3693 Jun 14, 2026
edb8bbe
Merge branch 'dotnet:main' into main
BharatRamsf3693 Jun 17, 2026
24f0bb1
Merge branch 'dotnet:main' into main
BharatRamsf3693 Jun 18, 2026
7687773
Merge branch 'dotnet:main' into main
BharatRamsf3693 Jun 24, 2026
7e2f003
Merge branch 'main' into main
BharatRamsf3693 Jun 29, 2026
e047b3d
Fix warning when using nullable properties in ValidationMessageStore.…
BharatRamsf3693 Jun 30, 2026
541eef2
Merge branch 'main' into main
BharatRamsf3693 Jun 30, 2026
670f23f
Merge branch 'main' into main
BharatRamsf3693 Jul 1, 2026
fc2ed5b
Merge branch 'main' into main
BharatRamsf3693 Jul 8, 2026
ce7e4d0
Fix warning when using nullable properties in ValidationMessageStore.…
BharatRamsf3693 Jul 8, 2026
8301da5
Merge branch 'main' into main
BharatRamsf3693 Jul 8, 2026
9109815
Merge branch 'dotnet:main' into main
BharatRamsf3693 Jul 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/Components/Forms/src/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
#nullable enable
*REMOVED*Microsoft.AspNetCore.Components.Forms.ValidationMessageStore.Add(System.Linq.Expressions.Expression<System.Func<object!>!>! accessor, string! message) -> void
*REMOVED*Microsoft.AspNetCore.Components.Forms.ValidationMessageStore.Add(System.Linq.Expressions.Expression<System.Func<object!>!>! accessor, System.Collections.Generic.IEnumerable<string!>! messages) -> void
Microsoft.AspNetCore.Components.Forms.ValidationMessageStore.Add<TField>(System.Linq.Expressions.Expression<System.Func<TField>!>! accessor, string! message) -> void
Microsoft.AspNetCore.Components.Forms.ValidationMessageStore.Add<TField>(System.Linq.Expressions.Expression<System.Func<TField>!>! accessor, System.Collections.Generic.IEnumerable<string!>! messages) -> void
Microsoft.AspNetCore.Components.Forms.ValidationRequestedEventArgs.AddAsyncValidator(System.Func<System.Threading.CancellationToken, System.Threading.Tasks.Task!>! validator) -> void
*REMOVED*static Microsoft.AspNetCore.Components.Forms.EditContextDataAnnotationsExtensions.AddDataAnnotationsValidation(this Microsoft.AspNetCore.Components.Forms.EditContext! editContext) -> Microsoft.AspNetCore.Components.Forms.EditContext!
*REMOVED*static Microsoft.AspNetCore.Components.Forms.EditContextDataAnnotationsExtensions.EnableDataAnnotationsValidation(this Microsoft.AspNetCore.Components.Forms.EditContext! editContext) -> System.IDisposable!
Expand Down
4 changes: 2 additions & 2 deletions src/Components/Forms/src/ValidationMessageStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void Add(in FieldIdentifier fieldIdentifier, string message)
/// </summary>
/// <param name="accessor">Identifies the field for which to add the message.</param>
/// <param name="message">The validation message.</param>
public void Add(Expression<Func<object>> accessor, string message)
public void Add<TField>(Expression<Func<TField>> accessor, string message)
=> Add(FieldIdentifier.Create(accessor), message);

/// <summary>
Expand All @@ -51,7 +51,7 @@ public void Add(in FieldIdentifier fieldIdentifier, IEnumerable<string> messages
/// </summary>
/// <param name="accessor">Identifies the field for which to add the messages.</param>
/// <param name="messages">The validation messages to be added.</param>
public void Add(Expression<Func<object>> accessor, IEnumerable<string> messages)
public void Add<TField>(Expression<Func<TField>> accessor, IEnumerable<string> messages)
=> Add(FieldIdentifier.Create(accessor), messages);

/// <summary>
Expand Down
33 changes: 33 additions & 0 deletions src/Components/Forms/test/ValidationMessageStoreTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,37 @@ public void CanClearMessagesForAllFields()
Assert.Empty(messages[field1]);
Assert.Empty(messages[field2]);
}
#nullable enable
[Fact]
public void CanAddMessagesUsingExpressionWithNullableProperty()
{
var model = new TestModel();
var editContext = new EditContext(model);
var messages = new ValidationMessageStore(editContext);

messages.Add(() => model.Text, "This value is not valid");

var fieldIdentifier = FieldIdentifier.Create(() => model.Text);
Assert.Equal(new[] { "This value is not valid" }, messages[fieldIdentifier]);
}

[Fact]
public void CanAddMultipleMessagesUsingExpressionWithNullableProperty()
{
var model = new TestModel();
var editContext = new EditContext(model);
var messages = new ValidationMessageStore(editContext);
var validationMessages = new[] { "First error", "Second error" };

messages.Add(() => model.Text, validationMessages);

var fieldIdentifier = FieldIdentifier.Create(() => model.Text);
Assert.Equal(validationMessages, messages[fieldIdentifier]);
}

private class TestModel
{
public string? Text { get; set; }
}
#nullable disable
}
Loading