Domanda

Sto cercando di usare un CheckBoxList in monorotaia per rappresentare una relazione molti a molti tavolo. C'è un tavolo speciale, tavolo SpecialTag, e poi un tavolo SpecialTagging che è il molti a molti tabella di mapping tra Speciale e SpecialTag.

Ecco un estratto dalla classe del modello speciale:

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

E poi nel mio Add / Edit vista speciale:

$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

Il CheckBoxList rende in modo corretto, ma se seleziono alcuni e quindi fare clic su Salva, ma non salva le associazioni speciale / tag alla tabella SpecialTagging (l'entità passato alla azione di controllo Salva ha una lista di tag vuoti.) Una cosa che ho notato è che il nome e il valore attributi le caselle sono 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> 

Qualcuno ha qualche idea?

Grazie! Justin

È stato utile?

Soluzione

Il CheckBoxList rende correttamente

mi sembra che si potrebbe anche rendere qualcosa come

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

che rendono più semplice (senza indice uscita per il nome, verrà adeguatamente risolto come un array con parametro di azione regolatore legante

Inoltre, nel campione, il fatto che tutte le caselle di controllo che ha lo stesso valore di UCampus.Core.Models.SpecialTag è probabilmente scorretto, si consiglia di uscita effettiva identificatore chiave primaria dai tag ( non è sicuro, si potrebbe visualizzare la classe si sono vincolanti indietro l'azione si maneggia la forma?)

Altri suggerimenti

sono stato in grado di farlo funzionare specificando solo l'ID e attributi di testo ...

 $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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top