1

大丈夫。これを正しく説明する方法がわかりません。この質問のタイトルが間違っている可能性があります。私はとの間に多対多の関係がReferenceありCategoryます:

public class Reference
{
    public int Id { get; set; }
    public string Headline { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
}
public class Category
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Reference> References { get; set; }
}

エントリの作成時にReference、ユーザーは必要な数のカテゴリを(使用可能なすべてのカテゴリを含むドロップダウンリストの形式で)追加できる必要があります。これまでに、モデルバインダーのビューで、関連データを作成するためのコントローラー内のロジックなしですべてを把握するために私が思いついたものは次のとおりです。

<div class='meta-container meta-cat'>
    <div class="meta-sub">
          <div class="editor-label">Name</div>
          <select name="Categories[0].Name" value="">
             @{
               var db = new DbContext();
               var categories = db.Categories.ToList();
               foreach (var c in categories)
               {
                    <option value="@c.CategoryId">@c.Name</option>
               }
              }

          </select>
     </div>
</div>
     <div class="additonalContainersCats"></div>
     <input type="submit" value="Add another category" id="AddCat" />

    <script>
            $('#AddCat').click(function () {
                var propNumber = 0;
                var dropdown = $(this).parent().find('select').first();
                var options = "";
                $(dropdown, "option").each(function() {
                    options += $(this).html();
                });
                $('.meta-cat').each(function () {
                    propNumber++;
                });
                var html = "<div class='meta-container meta-cat'>" +
                                "<div class='meta-sub'>" +
                                    "<div class='editor-label'>Name</div>" +
                                    "<select name='Categories[" + propNumber + "].Name' value=''>" +
                                     options +
                                    "</select>" +
                                "</div>" +
                                "</div>" +
                            "</div>";
                $('.additonalContainersCats').append(html);
                return false;
            });
    </script>

したがって、ユーザーが[新しいカテゴリの追加]ボタンをクリックするたびに、で新しいドロップダウンリストが作成されname="Category[int].Name"ます。これは、ドロップダウンリストの代わりに、1対多(参照用に1つのカテゴリ)の関係とテキストボックスで機能します。これはあまり見栄えの良いMVCではありません(非常にウェブフォームっぽいです):)

これをどのように行いますか?

更新-データを送信するときに結果について言及するのを忘れました。新しいカテゴリが作成されます。参照用に2つのカテゴリを選択すると、元のカテゴリのNameプロパティを使用して2つの新しいカテゴリが作成されCategoryIdます。参照と新しいカテゴリの間に関係が作成されます。ファンキーハァッ:)

4

2 に答える 2

1

Default ModelBinder は、カテゴリをデータベース内の既存のカテゴリにマップする方法を実際には認識していないようです。これは、AutoMapper (https://github.com/AutoMapper/AutoMapper/wiki/Getting-started) または独自の構造を実装して、新しい参照を既存のカテゴリのリストにマップすることを検討したい場合があります。すでに送信している CategoryID のコレクションを反復処理し、DB から取得して、Reference.Categories を上書きします。

于 2013-01-14T07:52:57.210 に答える
0

実際、それは非常に単純でした。ドロップダウン リストに name="Category[int].CategoryId" を .Name の代わりに指定する必要がありました。次に、プロパティを手動でループしてバインドします。手動バインド時に新しいカテゴリが作成されませんでした。

于 2013-01-18T22:50:01.997 に答える