Comment utiliser @Html.CheckBoxFor() tout en traitant avec une Liste<ViewModel>
C'est mon point de Vue. Comment utiliser CheckboxFor():
@using eMCViewModels;
@model eMCViewModels.RolesViewModel
@{
ViewBag.Title = "CreateNew";
}
<h2>
CreateNew<
/h2>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>RolesViewModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div>
@foreach (RoleAccessViewModel mnu in Model.RoleAccess)
{
//How to use checkboxfor here?
}
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Model.RoleAccess
est un List<RoleAccessViewModel>
et je veux créer case à cocher à l'aide de @Html.CheckBoxFor()
.
C'est mon RoleAccessViewModel
public class RoleAccessViewModel
{
public int RoleID { get; set; }
public string RoleName { get; set; }
public int MenuID { get; set; }
public string MenuDisplayName { get; set; }
public string MenuDiscription { get; set; }
public string IsEnabled { get; set; } //changed to bool
}
Supposons que j'ai 5 éléments dans la liste, puis j'ai besoin de 5 case ID=menuID et Texte = menuDisplayName. Comment puis-je y parvenir?
MODIFIER
Ma tentative
@Html.CheckBoxFor(x=>x.RoleAccess.SingleOrDefault(r=>r.MenuID==mnu.MenuID).IsEnabled )
@Html.LabelFor(x=>x.RoleAccess.SingleOrDefault(r=>r.MenuID==mnu.MenuID ).MenuDisplayName )
Mais après avoir changé le type de IsEnabled
de string
à bool
. La case à cocher œuvres. Mais Étiquette s'imprime seulement MenuDisplayName
au lieu de valeurs . Peut-on les aide ?
Pourquoi est-IsEnabled une chaîne de caractères?
Qu'avez-vous essayé lorsque vous essayez d'appeler
c'est le point de l'ensemble de la question. Apparemment, l'OP ne sait pas que le CheckBoxFor helper fonctionne uniquement sur les champs booléens, c'est pourquoi vous ne voyez pas toutes les tentatives, parce que son modèle de vue n'est tout simplement pas adapté pour travailler avec des cases à cocher.
Je ne suis pas sûr pourquoi vous essayez d'utiliser l'int pour une valeur Booléenne. Si c'est un Vrai/Faux, alors vous aurez envie de régler en conséquence. Comment évaluez-vous un vrai/faux à partir d'une valeur numérique? La deuxième question, quand vous publier une collection pour le contrôleur - compte tenu de votre code. Voir haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx pour vous la prochaine question....
J'ai essayé beaucoup et compiler le problème du temps. C'est parce que le type de IsEnabled est une chaîne. Il fonctionne lorsque j'ai changé de bool. Consultez la mise à jour de question
Qu'avez-vous essayé lorsque vous essayez d'appeler
CheckBoxFor
? Je ne vois pas une tentative de communiquer avec elle.c'est le point de l'ensemble de la question. Apparemment, l'OP ne sait pas que le CheckBoxFor helper fonctionne uniquement sur les champs booléens, c'est pourquoi vous ne voyez pas toutes les tentatives, parce que son modèle de vue n'est tout simplement pas adapté pour travailler avec des cases à cocher.
Je ne suis pas sûr pourquoi vous essayez d'utiliser l'int pour une valeur Booléenne. Si c'est un Vrai/Faux, alors vous aurez envie de régler en conséquence. Comment évaluez-vous un vrai/faux à partir d'une valeur numérique? La deuxième question, quand vous publier une collection pour le contrôleur - compte tenu de votre code. Voir haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx pour vous la prochaine question....
J'ai essayé beaucoup et compiler le problème du temps. C'est parce que le type de IsEnabled est une chaîne. Il fonctionne lorsque j'ai changé de bool. Consultez la mise à jour de question
OriginalL'auteur kbvishnu | 2012-07-25
Vous devez vous connecter pour publier un commentaire.
Changement foreach avec pour
Eh bien, je pense qu'il peut le faire lui-même si cette approche fonctionne pour lui
Html.LabelFor(Modèle.RoleAccess[i].MenuDisplayName); " il va imprimer uniquement
MenuDisplayName
. Pourquoi ? Il est prévu d'imprimer les valeurs de droite ?ce ma faute de frappe. Je voulais méthode displayfor.
I m désolé. Je suis nouveau sur le MVC. J'ai donc pensé Étiquette s'imprime quelque chose <label>Données</label>. Merci 🙂
OriginalL'auteur Madman
Si je comprend droite, Vous voulez dire? Et
IsEnabled
doit type boolmodèle
vue
OriginalL'auteur AliRıza Adıyahşi
CheckBoxFor
travaille avec les propriétés booléennes. Donc, la première chose que vous devez faire est de modifier votre modèle de vue afin d'inclure une propriété booléenne indiquant si l'enregistrement a été sélectionné:et alors je vous recommande le remplacement de votre
foreach
boucle avec un éditeur de modèle:et enfin écrire le correspondant de l'éditeur de template qui sera automatiquement affiché pour chaque élément de la RolesAccess collection (
~/Views/Shared/EditorTemplates/RoleAccessViewModel.cshtml
):De nombreuses raisons: c'est moche et à l'intérieur de la boucle foreach, vous allez générer des noms incorrects pour vos champs d'entrée et le modèle de classeur par défaut ne sera pas en mesure de désérialiser les valeurs de retour lorsque vous soumettez le formulaire. Pourquoi ne pas coller avec les conventions qui sont intégrés directement dans le cadre. Fait votre point de vue beaucoup plus simple et correcte.
Merci. Permettez-moi d'essayer de trouver plus d'avantages et de vérifier la façon dont u mentionné.
OriginalL'auteur Darin Dimitrov
Je sais que c'est assez vieux, mais
Dans votre utilisation du modèle DataAnotations Attribut D'Affichage
OriginalL'auteur vbjay