好的。我不确定如何正确解释这一点,并且这个问题的标题可能是错误的。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"
。这适用于一对多(一个类别供参考)关系和文本框,而不是下拉列表。这不是很漂亮的 MVC(它的 webform'ish):)
你会怎么做?
更新 - 提交数据时忘记提及结果。新类别已创建。如果我选择 2 个类别作为参考,则会使用原始类别的Name
属性创建两个新类别。CategoryId
在参考和新类别之间创建关系。时髦的哈:)