Question

Je suis en train d'utiliser un CheckBoxList en monorail pour représenter une relation plusieurs à plusieurs de table. Il y a une table spéciale, table SpecialTag, puis une table SpecialTagging qui est le nombre à plusieurs table de correspondance entre spécial et SpecialTag.

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éciale:

$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 certains et puis cliquez sur Enregistrer, il ne enregistre les associations spéciales / tag à la table SpecialTagging (l'entité passée à l'action du contrôleur de sauvegarde a une liste des balises vides.) Une chose J'ai remarqué est que les attributs de nom et de valeur sur les cases à cocher sont froussard:

<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> 

Quelqu'un a des idées?

Merci! Justin

Était-ce utile?

La solution

Le CheckBoxList rend correctement

il me semble que vous pouvez aussi rendre quelque chose comme

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

ce qui rend plus simple (pas d'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

aussi, dans l'échantillon, le fait que toutes les cases ayant la même valeur UCampus.Core.Models.SpecialTag est probablement pas juste, vous voudrez peut-être à l'identificateur de clé primaire réelle de sortie des étiquettes ( pas sûr, vous pouvez afficher la classe que vous liez en arrière sur la forme action initiée?)

Autres conseils

j'ai pu le faire fonctionner en spécifiant les attributs id et le 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top