web-dev-qa-db-fra.com

"Les noms d'attribut n'ont pas pu être déduits de l'attribut Bind Attribut" Linge-Value "" Exception dans Blazor

Je viens de migrer un projet Blazor de Core 3 Aperçu 6 à la prévisualisation 8 et je reçois maintenant cette erreur:

Les noms d'attributs n'ont pas pu être déduits de la "valeur de liaison" d'attribut de liaison. Les attributs de liaison doivent être du formulaire "Lier" ou "Valeur de liaison" avec leurs paramètres facultatifs correspondants tels que "Bind-Valeur: Event", "Bind: format", etc.

J'ai isolé le composant qui cause que cela se produise et que le code semble certainement bind-value Définir selon les instructions du message d'erreur:

      <TelerikDropdownList Data="@State.ContainerSizes" 
                           ValueField=@nameof(ContainerSize.ContainerSizeId)
                           TextField=@nameof(ContainerSize.ContainerSizeName)
                           @bind-Value="@ContainerSizeIdNoNull"
                           >
      </TelerikDropdownList>

J'ai essayé de supprimer le @ de @bind-Value et changer la capitalisation @bind-Valueetc. mais tout en vain.

Que peut causer cela?

18
tomRedox

Il s'avère qu'il y a au moins deux causes de ceci:

Le nom du composant est maintenant sensible à la casse

La réponse s'avère que la nommée des composants de blazor est désormais sensible à la casse et je manquais une lettre majuscule dans "Telerikdropdownlist" qui devrait être TelerikDrop [~ # ~ # ~ # ~ # ~] propriétaire.

Le changement pour utiliser des noms sensibles à la casse est documenté ici et est également discuté ici . L'idée était de réduire les messages trompeurs, mais il a eu la conséquence d'introduire un autre, donc j'ai soulevé n problème pour cela sur le repo aspnetcore .

Vous avez oublié la déclaration "Utilisation" pour l'espace de noms du composant

Vous obtiendrez également la même erreur si vous avez oublié ou supprimé le @using Déclaration pour l'espace de noms du composant. C'est très facile à faire si vous utilisez Resharper, car il s'agit actuellement d'eux comme inutilisé et offrant de les supprimer.

Vérification si c'est le problème

Un bon moyen de vérifier si le compilateur a identifié correctement votre composant en tant que composant Blazor plutôt qu'une balise HTML consiste à vérifier le codage de la couleur des mots-clés. Ils auront la même couleur si les choses fonctionnent correctement (verte dans l'exemple ci-dessous):

enter image description here

Alors que si le nom ou l'espace de noms est faux, vous verrez un mélange de couleurs (noter que Data et ValueField sont maintenant une couleur différente de TelerikDropdownList:

enter image description here

6
tomRedox

Je peux ajouter un autre piège non évident (au moins pour moi).

Complètement qualifiés de la composante et s'appuyant ensuite sur la déclaration à l'aide d'identifier les propriétés ne fonctionne pas. Cela a été ajouté par IntelliSense.

Exemple de ne pas fonctionner:

@using WebUI.Components.Modals
<WebUI.Components.Modals.WebUI.Components.Modals.AssetModal @bind-IsVisible="_assetDialogVisible" Asset="_selectedAsset"></WebUI.Components.Modals.WebUI.Components.Modals.AssetModal>

Version de travail:

@using WebUI.Components.Modals
<AssetModal @bind-IsVisible="_assetDialogVisible" Asset="_selectedAsset"></AssetModal>
0
Vincent