Comment puis-je faire Html.CheckBoxFor() le travail sur une chaîne de caractères?
Je suis en utilisant ASP.NET MVC3 avec Rasoir et C#. Je fais un générateur de formulaire de toutes sortes, j'ai donc un modèle qui dispose d'une collection de l'objet suivant:
public class MyFormField
{
public string Name { get; set; }
public string Value { get; set; }
public MyFormType Type { get; set; }
}
MyFormType est juste un enum qui me dit que si le champ de formulaire est une case à cocher, ou zone de texte, ou un téléchargement de fichier, ou quoi que ce soit. Mon éditeur de modèle ressemble à quelque chose comme ceci (voir le commentaire):
~/Views/EditorTemplates/MyFormField.cshtml
@model MyFormField
@{
switch (Model.Type)
{
case MyFormType.Textbox:
@Html.TextBoxFor(m => m.Value)
case MyFormType.Checkbox:
@Html.CheckBoxFor(m => m.Value) //This does not work!
}
}
J'ai essayé de coulée/conversion de la m.Value
à un bool dans l'expression lambda pour CheckBoxFor(), mais qui a jeté une erreur. Je voudrais juste manuellement construire une case de saisie, mais CheckBoxFor() semble faire deux choses que je n'arrive pas à répliquer:
- Crée un caché d'entrée qui en quelque sorte est renseigné par la case. Cela semble être ce que le modèle de classeur ramasse.
- Génère la forme du nom de l'objet, de sorte que le modèle de classeur obtient la valeur dans le droit de propriété.
Quelqu'un sait-il un moyen de contourner à l'aide de CheckBoxFor() sur une chaîne, ou une façon de répliquer à ses fonctionnalités manuellement, de sorte que je peux faire ce travail?
OriginalL'auteur jrizzo | 2011-08-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également ajouter une propriété sur votre viewmodel:
Votre point de vue serait quelque chose comme ceci:
Utiliser Un Booléen.TryParse si vous voulez éviter les exceptions.
OriginalL'auteur Robin van der Knaap
Est une façon de créer votre propre htmlhelper méthode d'extension.
L'utilisation est la même que CheckBoxFor helper (e.La valeur est une chaîne de caractères)
OriginalL'auteur mdm20
Utiliser la Case à cocher, cette manière simple, fonctionne très bien
? true : false
partie.Model.MyString == "Y"
est déjà un booléen.OriginalL'auteur Fernando JS
J'ai eu ce problème aussi, mais a été incapable de modifier le modèle de vue. Essayé mdm20s solution, mais comme je le soupçonnais, il ne fonctionne pas sur les propriétés de collection (il n'ajoute pas l'index pour les noms et id comme la native html helpers). Pour surmonter cela, vous pouvez utiliser le code Html.Case à cocher à la place. Il ajoute les index appropriés et vous pouvez passer la valeur de la case vous-même.
Si vous voulez vraiment utiliser une expression que vous pouvez toujours écrire un wrapper similaire à mdm20s mais de remplacer tout ce qui est après le TryParse avec
return Html.CheckBox("propertyName", isChecked)
. Évidemment, vous aurez besoin d'ajouterusing System.Web.Mvc.Html
.OriginalL'auteur Iain