MonoRail CheckboxList?

Я пытаюсь использовать список флажков в MonoRail для представления отношений между таблицами "многие ко многим". Существует таблица Special, таблица SpecialTag, а затем таблица SpecialTagging, которая представляет собой таблицу сопоставления многих ко многим между Special и SpecialTag.

Вот выдержка из класса модели Special:

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

А затем в моем специальном окне добавления / редактирования:

$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

Список флажков отображается правильно, но если я выберу некоторые из них и затем нажму «Сохранить», они не сохранят связи специальных / тегов в таблице SpecialTagging (объект, переданный в действие контроллера «Сохранить», имеет пустой список тегов). Я заметил одну вещь. что атрибуты name и value на флажках напуганы:

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

У кого-нибудь есть идеи?

Спасибо! Джастин


person Justin    schedule 01.06.2010    source источник


Ответы (2)


Список флажков отображается правильно

мне кажется, что вы могли бы также сделать что-то вроде

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

которые делают его проще (нет индекса для вывода для имени, он будет правильно разрешен как массив через привязку параметра действия контроллера

Кроме того, в вашем примере тот факт, что все флажки имеют одинаковое значение UCampus.Core.Models.SpecialTag, вероятно, неверен, вы можете вывести фактический идентификатор первичного ключа из тегов (не уверен, не могли бы вы отобразить класс, который вы привязываете обратно, в действии обработки формы?)

person smoothdeveloper    schedule 21.06.2010

Мне удалось заставить его работать, указав атрибуты id и text ...

 $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
person Justin    schedule 01.06.2010