Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
| Value | |
|---|---|
| ID della regola | BL0008 |
| Categoria | Usage |
| La modifica è dirompente o non dirompente | Non-breaking |
Motivo
Una proprietà ha l'attributo[SupplyParameterFromForm] e viene inizializzata con un inizializzatore di proprietà non predefinito.
Descrizione regola
L'inizializzatore di proprietà può essere sovrascritto con null durante l'invio del modulo, provocando il fallimento di EditForm e generando la seguente eccezione:
InvalidOperationException: EditForm requires either a Model parameter, or an EditContext parameter, please provide one of these.
L'analizzatore avvisa gli sviluppatori quando viene rilevato questo modello, ignorando in modo sicuro gli inizializzatori di valori predefiniti (null, null!, default, default!) che non causano lo stesso problema.
Si consideri il seguente modello di modulo Input con un inizializzatore di proprietà:
[SupplyParameterFromForm]
public InputModel Input { get; set; } = new();
L'analizzatore segnala l'avviso seguente, dove il {COMPONENT} segnaposto è il nome del tipo di componente:
Proprietà '{COMPONENT}.Input' ha [SupplyParameterFromForm] e un inizializzatore di proprietà. Può essere sovrascritto con null durante gli invii del modulo.
Modelli sicuri ignorati dall'analizzatore:
[SupplyParameterFromForm]
public InputModel Input { get; set; } = default!;
[SupplyParameterFromForm]
public InputModel Input { get; set; } = null!;
Come correggere le violazioni
Per assicurarsi che il valore inizializzato non venga sovrascritto, spostare l'inizializzazione in uno dei metodi del OnInitialized{Async} ciclo di vita.
Si consideri il componente seguente Razor che genera un avviso di analisi del codice BL0008 perché il Input modello per il modulo è decorato con [SupplyParameterFromForm] e ha un inizializzatore di proprietà:
<EditForm Model="Input" OnSubmit="Submit" FormName="Starship1">
...
</EditForm>
@code {
[SupplyParameterFromForm]
private InputModel Input { get; set; } = new();
private void Submit()
{
...
}
public class InputModel
{
public string? Id { get; set; }
}
}
Per correggere la violazione, il codice di inizializzazione per la Input proprietà viene spostato nel OnInitialized metodo del ciclo di vita, lasciando la proprietà come proprietà implementata automaticamente (proprietà automatica). La modifica seguente apporta anche un Input:
[SupplyParameterFromForm]
private InputModel? Input { get; set; }
protected override void OnInitialized() => Input ??= new();
Quando eliminare gli avvisi
Non eliminare un avviso da questa regola.