Таким образом, в приложении со структурой реляционных баз данных «один ко многим» вы, конечно, должны иметь возможность добавлять несколько дочерних записей для родителя ... Итак, допустим, что у вас есть пользователь, и у пользователя может быть один профиль, но каждый профиль может иметь несколько проектов, и, конечно, проекты состоят из нескольких дочерних таблиц, таких как, например, ProjectCodeSamples, являясь одной из них ...
Очевидно, что для добавления нового ProjectCodeSample требуется ProjectID, которому он принадлежит (в качестве внешнего ключа) ... Итак, в представлении AddCodeSample как получить это значение, значение ProjectID, чтобы вы можете поместить это в скрытое поле и передать его?
Вот модель ProjectCodeSample:
namespace ProDevPortMVC3
{
using System;
using System.Collections.Generic;
public partial class ProjectCodeSample
{
public int ProjectCodeSampleID { get; set; }
public int ProjectID { get; set; }
public string ProjectCodeSampleContent { get; set; }
public string ProjectCodeSampleDescription { get; set; }
public virtual Project Project { get; set; }
}
}
Вот два моих метода действий контроллера для AddCodeSample:
//
// GET: /Project/AddCodeSample
public ActionResult AddCodeSample()
{
return View();
}
//
// POST: /Project/AddCodeSample
[HttpPost]
public ActionResult AddCodeSample(ProjectCodeSample projectcodesample)
{
projectcodesample.ProjectCodeSampleContent = projectcodesample.ProjectCodeSampleContent.TrimStart();
if (ModelState.IsValid)
{
db.ProjectCodeSamples.Add(projectcodesample);
db.SaveChanges();
return RedirectToAction("Details/" + projectcodesample.ProjectID);
}
else
{
return View(projectcodesample);
}
}
Вот мой AddCodeSample View:
@model ProDevPortMVC3.ProjectCodeSample
@{
ViewBag.Title = "Add Code Sample";
}
<style type="text/css">
.editor-label { width: 200px; }
.editor-field { width: 700px; }
.submit-button-row { width: 900px; }
.bottom-nav { width: 900px; }
</style>
<h2>Add Code Sample</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset style="float: left; width: 900px;">
<legend>Project Code Sample</legend>
@Html.HiddenFor(model => model.ProjectID)
<div class="display-editor-label-field-row">
<div class="editor-label">
@Html.LabelFor(model => model.ProjectCodeSampleDescription, "Code Sample Description")
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.ProjectCodeSampleDescription, 4, 85, null)
@Html.ValidationMessageFor(model => model.ProjectCodeSampleDescription)
</div>
</div>
<br />
<div class="display-editor-label-field-row">
<div class="editor-label">
@Html.LabelFor(model => model.ProjectCodeSampleContent, "Code Sample")
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.ProjectCodeSampleContent, 15, 85, null)
@Html.ValidationMessageFor(model => model.ProjectCodeSampleContent)
</div>
</div>
<br />
<div class="display-editor-label-field-row">
<div class="submit-button-row">
<input type="submit" value="Save" />
</div>
</div>
<br />
<div class="bottom-nav">
@Html.ActionLink("Cancel", "Details", new { id = ViewContext.RouteData.Values["ID"] })
</div>
</fieldset>
}
Так что, очевидно, это не будет работать, потому что "@ Html.HiddenFor (model => model.ProjectID)" будет пустым ... Так что я делаю не так, как вы получаете Parent ID, чтобы вы могли сделать Дочерние записи?