Existe-t-il des méthodes d'aide html pour l'affichage des valeurs booléennes dans une liste déroulante?Aide HTML pour les valeurs booléennes dans asp.net mvc
Répondre
Pourquoi ne pas utiliser Html.CheckBox()?
Techniquement, vous ne pouvez pas produire de valeurs nulles avec une case à cocher. Si la sémantique de la situation nécessite une possibilité «je ne sais pas», alors vous avez besoin d'une autre méthode. Mais sinon, c'est la bonne façon de faire. Ou peut-être 'Html.CheckBox (x => x.Property)'. –
@NickLarsen, Bien que je suis d'accord, le PO a spécifiquement posé des questions sur les bools. Et à moins que ce soit nullable (non déclaré), ce n'est pas un problème. –
Utilisez l'assistant DropDownListFor. Passez votre valeur booléenne et une liste de sélection contenant les valeurs que vous souhaitez mapper en booléen.
Model.MyBooleanList pourrait être un SelectList avec selectlistitems {("Oui", true); ("Non", false)} Model.MyBoolean est juste une valeur bool que vous voulez atteindre/mettre votre point de vue
<%= Html.DropDownListFor(m => m.MyBoolean, Model.MyBooleanList)%>
HTH
Ceci est un vieux fil, mais encore au-dessus de quelques recherches.
Vous pouvez le faire en utilisant le construit en DropDownListFor HTML Helper:
<%= Html.DropDownListFor(model => Model.MyBooleanProperty,new List<SelectListItem>(){ new SelectListItem(){ Text = "Yes", Value="True"}, new SelectListItem(){ Text = "No", Value="False"}})%>
Vous pouvez également implémenter votre propre HTML Helper:
public static MvcHtmlString BooleanDropdownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
return BooleanDropdownListFor(htmlHelper, expression, null);
}
public static MvcHtmlString BooleanDropdownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string EmptyText)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
bool? value = null;
if (metadata != null && metadata.Model != null)
{
if (metadata.Model is bool)
value = (bool)metadata.Model;
else if (metadata.Model.GetType() == typeof(bool?))
value = (bool?)metadata.Model;
}
List<SelectListItem> items = EmptyText != null ?
new List<SelectListItem>() { new SelectListItem() { Text = EmptyText, Value = "" }, new SelectListItem() { Text = "Yes", Value = "True", Selected = (value.HasValue && value.Value == true) }, new SelectListItem() { Text = "No", Value = "False", Selected = (value.HasValue && value.Value == false) } } :
new List<SelectListItem>() {new SelectListItem() { Text = "Yes", Value = "True", Selected = (value.HasValue && value.Value == true) }, new SelectListItem() { Text = "No", Value = "False", Selected = (value.HasValue && value.Value == false) } };
return htmlHelper.DropDownListFor(expression, items);
}
Je suggère d'utiliser une propriété nullable bool sur votre vue Modèle pour que la liste déroulante ne soit pas par défaut "faux" ou "vrai". Vous pouvez facilement baliser le viewmodel avec l'attribut Required qui serait handel si aucune option n'était sélectionnée.
J'ai ceci:
public static class BoolUtility
{
public static IEnumerable<SelectListItem> SelectList(string defaultText = null, string defaultTrue = "True", string defaultFalse = "False")
{
var list = new List<SelectListItem>
{
new SelectListItem {Text = defaultTrue, Value = "True"},
new SelectListItem {Text = defaultFalse, Value = "False"}
};
if (defaultText != null)
{
list.Insert(0, new SelectListItem
{
Text = defaultText,
Value = string.Empty
});
}
return list;
}
}
Et l'utiliser comme ceci:
@Html.DropDownListFor(m => m.SomeBoolProperty, BoolUtility.SelectList("All", "Yes", "No"))
Et il semble bien fonctionner. Assez flexible, puisque vous pouvez contrôler toutes les étiquettes, et si oui ou non il y a une valeur 'par défaut'.
Oh, et quelques tests unitaires NUnit, si vous voulez. Pas exhaustive, mais ce n'est pas si compliqué que ça ...
[TestFixture]
class BoolUtilityTests
{
[Test]
public void Parameterless()
{
var actual = BoolUtility.SelectList().ToList();
Assert.That(actual.Count, Is.EqualTo(2));
Assert.That(actual.First().Text, Is.EqualTo("True"));
Assert.That(actual.First().Value, Is.EqualTo("True"));
Assert.That(actual.Last().Text, Is.EqualTo("False"));
Assert.That(actual.Last().Value, Is.EqualTo("False"));
}
[Test]
public void LabelOverrides()
{
var actual = BoolUtility.SelectList(defaultTrue: "Yes", defaultFalse: "No").ToList();
Assert.That(actual.Count, Is.EqualTo(2));
Assert.That(actual.First().Text, Is.EqualTo("Yes"));
Assert.That(actual.First().Value, Is.EqualTo("True"));
Assert.That(actual.Last().Text, Is.EqualTo("No"));
Assert.That(actual.Last().Value, Is.EqualTo("False"));
}
[Test]
public void IncludeDefaultOption()
{
var actual = BoolUtility.SelectList(defaultText: "all").ToList();
Assert.That(actual.Count, Is.EqualTo(3));
Assert.That(actual.First().Text, Is.EqualTo("all"));
Assert.That(actual.First().Value, Is.EqualTo(string.Empty));
}
}
si vous voulez capturer OUI, NON et NotSet (pas de réponse) Les valeurs un peu je vous suggère d'utiliser une liste déroulante comme celui-ci
Public Class MyModelClass
{
[Display(Name = "Project Based Subsidy?")]
public Nullable<bool> IsSubsidyProjectBased{ get; set; }
public SelectList DropDownItems
{
get
{
List<DropDownItems> ddItem = new List<DropDownItems>();
ddItem.Add(new DropDownItems("--Select--", null));
ddItem.Add(new DropDownItems("Yes", true));
ddItem.Add(new DropDownItems("No", false));
return new SelectList(ddItem, "Value", "Text");
}
}
public class DropDownItems
{
public DropDownItems(string text, bool? value)
{
this.Text = text;
this.Value = value;
}
public string Text { get; set; }
public bool? Value { get; set; }
}
}
Ensuite, dans votre vue, vous pouvez simplement avoir
@Html.DropDownListFor(model => model.IsSubsidyProjectBased, Model.DropDownItems)
- 1. Aide HTML personnalisée dans ASP.NET MVC 2
- 2. Boolean vs tinyint (1) pour les valeurs booléennes dans MySQL
- 3. valeurs booléennes Objectif c
- 4. HTML dans ASP.NET MVC
- 5. Graphique pour la liste des valeurs booléennes
- 6. Comptage des valeurs booléennes sous les rails
- 7. Aide https asp.net mvc
- 8. ASP.NET MVC - Valeurs TextArea
- 9. Syntaxe HTML intégrée pour les assistants dans ASP.NET MVC
- 10. Aide avec les utilisateurs asp.net mvc
- 11. Aide avec asp.net mvc autorisation
- 12. Asp.net mvc html melper
- 13. Parse valeurs booléennes dans les chaînes à utiliser avec Function.apply
- 14. Trier les objets par des valeurs booléennes dans Ruby
- 15. HTML Valeurs de radiobuton dans ASP.NET
- 16. aide avec jquery dans asp.net mvc
- 17. Aide ASP.Net MVC avec refactoring
- 18. html helper html.dropdownlist dans asp.net mvc
- 19. Aide pour la création d'une extension d'aide html fortement typée dans Asp.net MVC 2
- 20. asp.net MVC HTML injection
- 21. ASP.NET MVC: aide de routage
- 22. aides Styling HTML ASP.NET MVC
- 23. ASP.Net MVC 3 - Extensions Html
- 24. Aide de l'architecture ASP.NET MVC/DDD
- 25. Asp.net MVC et les pages html normales
- 26. Création des migrations pour les vues SQL dans les rails avec des valeurs booléennes
- 27. Que dois-je utiliser pour les valeurs booléennes dans les formules, vraies, « true » ou true()
- 28. Aide ASP.NET MVC pour accéder aux images Gravatar
- 29. Enregistrer des valeurs booléennes: groupées ou individuellement?
- 30. Aide de retour de résultat ASP.NET MVC
Que html attendez-vous? Un élément select avec des éléments d'option dont la valeur est true ou false? –