dotnet/aspnetcore

ValidationMessageStore.Add field accessor parameter shows a warning for nullable properties

Open

#41,338 建立於 2022年4月23日

在 GitHub 查看
 (4 留言) (0 反應) (0 負責人)C# (10,653 fork)batch import
Pillar: Technical DebtPriority:2area-blazorbugfeature-blazor-form-validationhelp wanted

倉庫指標

Star
 (37,933 star)
PR 合併指標
 (平均合併 16天 9小時) (30 天內合併 258 個 PR)

描述

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

Adding validation errors using the below ValidationMessageStore.Add method triggers a warning when nullable annotations are enabled for the project, and the property referenced in the accessor parameter has a nullable type.

https://github.com/dotnet/aspnetcore/blob/2f68ef8d42646046eb36ff2db5f17965a7893545/src/Components/Forms/src/ValidationMessageStore.cs#L38-L39

Expected Behavior

No warnings are displayed for properties with nullable type.

Steps To Reproduce

The following code shows how the warning message is triggered:

private TestModel model = new();

private class TestModel
{
    public string? Text { get; set; }
}

private void ManualValidation()
{
    var messageStore = new ValidationMessageStore(editContext);

    if (true /* External validation rule */)
    {
        messageStore?.Add(() => model.Text, "This value is not valid");
        //                      ^^^^^^^^^^  <-- Warning triggered here
    }
}

Full repro at https://github.com/vuorinem/aspnet_blazor_validationmessagestore_warning_repro/blob/6ba9b0a2b4fe0f38c1da6e7e5577dd75083dc9b6/BlazorApp1/Pages/Index.razor

Exceptions (if any)

No response

.NET Version

6.0.202

Anything else?

Changing the method signature to the following (from object to generic parameter TField) could fix the issue as far as I understand:

public void Add<TField>(Expression<Func<TField>> accessor, string message)

That would match the the method in FieldIdentifier:

https://github.com/dotnet/aspnetcore/blob/2f68ef8d42646046eb36ff2db5f17965a7893545/src/Components/Forms/src/FieldIdentifier.cs#L20

貢獻者指南