Pregunta

Estoy tratando de usar una lista de cheques en Monorail para representar una relación de muchas tasas. Hay una tabla especial, una mesa especial y luego una mesa especial que es la tabla de mapeo de muchos a muchas entre especial y especialTag.

Aquí hay un extracto de la clase de modelo especial:

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

Y luego en mi Vista especial ADD/EDITAR:

$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

CheckBoxList se reproduce correctamente, pero si selecciono algunos y luego hago clic en Guardar, no guarda las asociaciones especiales/de etiquetas en la tabla especial de etiqueta (la entidad pasada a la acción del controlador guardado tiene una lista de etiquetas vacías). Una cosa que noté fue que fue que los atributos de nombre y valor en las casillas de verificación son 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> 

¿Alguien tiene alguna idea?

¡Gracias! Justin

¿Fue útil?

Solución

La lista de cheques renderiza correctamente

Me parece que también podrías representar algo como

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

que lo simplifican (no hay índice de salida para el nombre, se resolverá correctamente como una matriz a través del enlace de parámetros de acción del controlador

Además, en su muestra, el hecho de que todas las casillas de verificación tienen el mismo valor Ucampus.core.models.specialtag Probablemente no sea correcto, es posible que desee generar un identificador de clave principal real de las etiquetas (no estoy seguro, ¿podría mostrar la clase que está vinculando nuevamente en la acción de manejo de formulario?)

Otros consejos

Pude hacer que funcionara especificando los atributos de identificación y texto ...

 $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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top