我的 MVC 应用程序具有经典的父子(主从)关系。
我想要一个页面,在同一页面上创建新的父级和子级。我添加了一个返回部分视图并将子 HTML 添加到父视图的操作,但我不知道如何将操作中新创建的子级关联到原始父级(换句话说,我如何添加新的子实体到父实体中这些实体的集合)。
我想当我提交表单时,该操作应该在其集合中获取包含新创建子项的父实体。
所以简而言之,创建子实体的操作代码应该是什么,以及如何将子实体添加到其父集合中?
我在这里(和其他网站)阅读了很多帖子,但找不到示例。
该应用程序使用 MVC 4 和 Entity Framework 5。
代码示例(我删除了一些代码以保持简单)。该模型是 Form(父)和 FormField(子)实体。
public partial class Form
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<FormField> FormFields { get; set; }
}
public partial class FormField
{
public int ID { get; set; }
public string Name { get; set; }
public int FormID { get; set; }
}
以下部分视图 (_CreateFormField.cshtml) 创建新的 FormField(子)。
@model FormField
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>FormField</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.FormID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FormID)
@Html.ValidationMessageFor(model => model.FormID)
</div>
</fieldset>
}
以下视图 (Create.cshtml) 是创建表单的视图。
@model Form
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Form</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div>
@Html.ActionLink(
"Add Field",
"CreateFormField",
new { id = -1},
new { @class = "form-field" })
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
<div id="CreateFormField"></div>
@section Scripts {
<script>
$(function () {
$('.form-field').on('click', function (e) {
$.get($(this).prop('href'), function (response) {
$('#CreateFormField').append(response)
});
e.preventDefault();
});
});
</script>
@Scripts.Render("~/bundles/jqueryval")
}
以下操作处理 FormController 中的创建。
[HttpPost]
public ActionResult Create(Form form)
{
if (ModelState.IsValid)
{
db.Forms.Add(form);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(form);
}
public ActionResult CreateFormField(string id = null)
{
// I guess something is missing here.
return PartialView("_CreateFormField", new FormField());
}
提前致谢,
沙龙。