質問

MonoRail でチェックボックスリストを使用して多対多のテーブル関係を表現しようとしています。Special テーブル、SpecialTag テーブル、そして Special と SpecialTag の間の多対多マッピング テーブルである SpecialTagging テーブルがあります。

以下は 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> 

何かアイデアがある人はいますか?

ありがとう!ジャスティン

役に立ちましたか?

解決

チェックボックスリストが正しくレンダリングされる

次のようなものをレンダリングすることもできるようです

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

これにより、簡単になります (名前のインデックスを出力する必要はありません。コントローラーのアクション パラメーター バインディングを介して配列として適切に解決されます)

また、サンプルでは、​​すべてのチェックボックスが同じ値を持つという事実 UCampus.Core.Models.SpecialTag おそらく正しくありません。タグから実際の主キー識別子を出力することをお勧めします (よくわかりません。フォーム処理アクションにバインドしているクラスを表示できますか?)

他のヒント

IDとテキストの属性を指定することで、それを機能させることができました...

 $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