Вопрос

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

Вот отрыв из специального класса модели:

[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 (у сущности, передаваемого в действие сохранения контроллера, есть пустой список тегов.) Одна вещь, которую я заметил, была была была что атрибуты имени и значения на флажках являются прикольными:

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

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

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

Это было полезно?

Решение

Флакторный список рендерирует правильно

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

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

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

Кроме того, в вашем примере тот факт, что все флажки, имеющие одинаковое значение Ucampus.core.models.specialtag Вероятно, не правильно, вы можете вывести фактический идентификатор первичного ключа из тегов (не уверены, не могли бы вы отобразить класс, который вы привязываете обратно на действие обработки формы?)

Другие советы

Я смог заставить его работать, указав атрибуты идентификатора и текста ...

 $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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top