大丈夫。これを正しく説明する方法がわかりません。この質問のタイトルが間違っている可能性があります。私はとの間に多対多の関係が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
ます。参照と新しいカテゴリの間に関係が作成されます。ファンキーハァッ:)