Html.EnumDropdownListFor: afficher un texte par défaut
À mon avis j'ai un enumdropdownlist (une nouvelle fonctionnalité dans Asp.Net MVC 5.1).
@Html.EnumDropDownListFor(m => m.SelectedLicense,new { @class="form-control"})
Si j'exécute le code ci-dessus-je obtenir dropdownlist pour mon enum ci-dessous.
public enum LicenseTypes
{
Trial = 0,
Paid = 1
}
mais par défaut, je veux que mon dropdownlist avoir une valeur(texte personnalisé)
et c'est ce que j'ai essayé
@Html.EnumDropDownListFor(m => m.SelectedLicense,"Select a license" ,new { @class="form-control"})
mais maintenant, le problème est quand je le lance, mon dropdownlist ressemble à ceci
Donc, le texte par défaut, je veux vous montrer n'apparaît pas par défaut.
Si un utilisateur sélectionne "sélectionnez une licence" et tente de soumettre le formulaire, il affiche un message d'erreur indiquant "sélectionnez une licence", mais il ne montre pas de texte par défaut.
Quelque chose que je dois changer?
Ps: L'image est la capture d'écran de la page lors du chargement. Par défaut, il va montrer Procès, selon l'option sélectionnée.
Vous devez vous connecter pour publier un commentaire.
Essayer de changer la
Index
deLicenseTypes
début de1
pas0
comme ci-dessous:Ensuite, vous pouvez utiliser
Range attribute
pour valider la licence sélectionnée type comme ci-dessous:Enfin, à votre avis:
Select a license
comme l'un de la valeur d'enum avec l'id 0. Je veux être en mesure d'afficher de message d'erreur lorsque l'utilisateur ne sélectionnez pas l'une des valeurs de l'enum.Par le temps de votre
EnumDropDownListFor
est renduSelectedLicense
a déjà la valeur par défaut pour le type, qui est0
.Il suffit de changer le type de votre
SelectedLicense
propriété nullable enum, comme suit:Cela vous permet également de continuer à utiliser le
Required
attribut, ce qui je pense est beaucoup plus propre. LeRequired
attribut ne permettra pas à une réponse null, donc, même si votre modèle permet à null, le formulaire ne sera pas.LicenseTypes
) et le formulaire est affiché avec "Sélectionnez une Licence" (l'élément de liste avec aucune valeur) sélectionné. VotreSelectedLicense
propriété jusqu'à la fin avec la valeur par défaut (Trial
). Si vous avez juste a examiné le modèle, il serait impossible à distinguer de l'utilisateur en fait la sélection de laTrial
valeur.J'ai un enum:
Dans mon modèle que j'ai:
Un dans la vue:
Par cela, j'ai une liste déroulante avec l'option par défaut ", Sélectionnez le sexe", mais la validation n'accepte que les options prévues par le protocole enum ("Masculin" et "Féminin").
Dans MVC3 (sans EnumDropDownListFor) j'ai utilisé dans le modèle:
En vue:
Le ViewModel de la classe doit avoir la valeur par défaut définie sur l'enum propriété pour qu'elle soit la valeur par défaut sélectionnée
public
Contrôleur:
Vue:
Je suis un peu en retard ?
Changeant les valeurs de type enum n'est pas très satisfaisant.
Ni est en train de changer le modèle de la propriété pour la rendre nullable et puis ajouter un attribut [Obligatoire] pour l'empêcher d'accepter les valeurs null.
Je propose d'utiliser le ViewBag pour définir la valeur sélectionnée par défaut de la liste déroulante.
La ligne 4 du contrôleur ci dessus est la seule importante.
EDIT : Ah... les débutants... Ma première idée était d'utiliser ModelState.SetModelValue parce que mon newbie instinct m'a empêché de simplement essayer de régler la valeur souhaitée dans le ViewBag depuis la liste déroulante a été appliqué au modèle. J'étais sûr d'avoir un problème: il serait lier à la propriété, de ne pas le ViewBag de la propriété. J'ai été tout faux: ViewBag est OK. J'ai corrigé le code.
Ici est un exemple.
Modèle:
Contrôleur:
Vue:
Sans le "ModelState.SetModelValue ou ViewBag.FavouriteMusic = string.Vide" de la ligne dans l'Index de modèle d'action de la valeur sélectionnée par défaut serait le "Métal" et non pas "Sélectionnez votre musique..."