2010-06-01 5 views
0

J'essaie d'utiliser une checkboxlist dans MonoRail pour représenter une relation de plusieurs à plusieurs tables. Il y a une table spéciale, une table SpecialTag, puis une table SpecialTagging qui est la table de mappage plusieurs à plusieurs entre Special et SpecialTag.MonoRail CheckboxList?

Voici un extrait de la classe modèle spécial:

[HasAndBelongsToMany(typeof(SpecialTag), 
     Table = "SpecialTagging", ColumnKey = "SpecialId", ColumnRef = "SpecialTagId")] 
     public IList<SpecialTag> Tags { get; set; } 

Et puis dans mon add/edit vue spécial:

$Form.LabelFor("special.Tags", "Tags")<br/> 
    #set($items = $FormHelper.CreateCheckboxList("special.Tags", $specialTags)) 
     #foreach($specialTag in $items) 
      $items.Item("$specialTag.Id") $Form.LabelFor("$specialTag.Id", $specialTag.Name) 
    #end 

Le CheckBoxList rend correctement, mais si je sélectionne quelques-uns, puis cliquez sur Enregistrer, il n'enregistre pas les associations tag/special à la table SpecialTagging (l'entité transmise à l'action Save controller a une liste Tags vide). Une chose que j'ai remarquée est que les attributs name et value sont funky:

<label for="special_Tags">Tags</label><br> 
        <input id="3" name="special.Tags[0]" value="UCampus.Core.Models.SpecialTag" type="checkbox"> <label for="3">Buy 1 Get 1 Free</label> 
      <input id="1" name="special.Tags[1]" value="UCampus.Core.Models.SpecialTag" type="checkbox"> <label for="1">Free</label> 
      <input id="2" name="special.Tags[2]" value="UCampus.Core.Models.SpecialTag" type="checkbox"> <label for="2">Half Price</label> 
      <input id="5" name="special.Tags[3]" value="UCampus.Core.Models.SpecialTag" type="checkbox"> <label for="5">Live Music</label> 
      <input id="4" name="special.Tags[4]" value="UCampus.Core.Models.SpecialTag" type="checkbox"> <label for="4">Outdoor Seating</label> 

Vous avez des idées?

Merci! Justin

Répondre

0

Le CheckBoxList rend correctement

il me semble que vous pourriez aussi rendre quelque chose comme

<input type="checkbox" name="special.Tags" value="1"/> 
<input type="checkbox" name="special.Tags" value="2"/> 

ce qui le rend plus simple (aucun index de sortie pour le nom, il sera correctement résolu comme un tableau via le paramètre d'action du contrôleur de liaison

également, dans votre échantillon, le fait que toutes les cases ayant la même valeur UCampus.Core.Models.SpecialTag est probablement pas juste, vous voudrez peut-être sortir l'identifiant de clé primaire réel des balises (pas sûr, pourriez-vous afficher la classe que vous liez sur l'action de gestion de formulaire?)

0

j'ai pu le faire fonctionner en spécifiant l'ID et les attributs de texte ...

$Form.LabelFor("special.Tags", "Tags")<br/> 
    #set($items = $FormHelper.CreateCheckboxList("special.Tags", $specialTags, "%{value='Id', text='Name'}")) 
     #foreach($specialTag in $items) 
      $items.Item("$specialTag.Id") $Form.LabelFor("$specialTag.Id", $specialTag.Name) 
    #end