2012-04-29 2 views
1

j'avoir une vue modèle « MyClass » qui contient un dictionnaire:Modifier le dictionnaire dans MVC3

Dictionary<string, bool> columns {get; set;} 

et il a les clés et les valeurs

columns.Add("Name", true); 
columns.Add("Type", true); 

maintenant, je veux que l'utilisateur de modifier MyClass et son dictionnaire.

Pour chaque clé Je veux montrer sa clé et permettre de vérifier \ unchek sa valeur (true \ false), de sorte que le nom de l'entrée sera le bon nom pour l'édition. Puisque le dictionnaire a beaucoup de clés, je dois le faire avec "foreach" ou "for".

Comment puis-je faire cela?

Répondre

0
+0

ça ne me répond pas vraiment. Je connais MVC ... – TamarG

+1

@tamarg Donc, vous devez savoir comment générer html avec des entrées, des cases à cocher, comment passer le modèle dans le contrôleur et comment envoyer json aux actions du contrôleur. –

+0

Je l'ai fait pour les listes mais je ne peux pas le faire pour les dictionnaires de la classe. Avez-vous lu ma question du tout? – TamarG

0

Vous devez écrire quelque chose comme ça dans votre vue

@using (Html.BeginForm()) { 

    <fieldset> 
     <legend>MyClassViewModel</legend> 
     @foreach (var item in Model.Columns){ 
      @Html.Label(item.Key) 
      @Html.CheckBox(item.Key, item.Value) 
     } 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

et votre vue doit être se lier à modéliser dans ce cas

@model MvcDemoApp.Models.MyClassViewModel 

ou une alternative

@foreach (var item in Model.Columns) 
    { 
     @item.Key 
     <input type="checkbox" id="@item.Key" checked="@item.Value" /> 
     <input type="hidden" value="@item.Value" /> 
     <br /> 
    } 

ou essayez d'utiliser aide CheckBoxList personnalisée par la communauté

http://weblogs.asp.net/gunnarpeipman/archive/2011/05/05/asp-net-mvc-implementing-checkboxlist.aspx

http://www.codeproject.com/Articles/292050/MVC3-Html-CheckBoxList-custom-extension

+0

Il ne aide pas, parce que le code HTML est et le nom ne correspond pas à la nom du dictionnaire. – TamarG

+0

À mon extrémité, c'est comme Où comme "Type" est la clé dans le dictionnaire avec la valeur vrai... Pouvez-vous s'il vous plaît élaborer votre question un peu plus et partager exactement ce que vous liez en vue et en passant du contrôleur? – Adil

+0

FYI J'utilise MVC 3 et Razar – Adil

0

Dans votre cas, vous voulez quelque chose comme ça, pour le liant par défaut pour comprendre le format name="":

<input type="checkbox" name="columns[0].Value" value="Key0 string value" /> 
<input type="checkbox" name="columns[1].Value" value="Key1 string value" /> 

Malheureusement, les helpers par défaut ne supportent pas complètement cela, donc vous devez écrire le name="" explicitement. Quelque chose comme:

@Html.CheckBox("columns[" + i + "].Value", new { value = columns[i].Key }); 

En savoir plus sur ce genre de fixations sur blog this.

Questions connexes