У меня есть класс учителя и класс курсов.Я создаю форму редактирования для учителей, где пользователь может редактировать информацию учителя, такую как имя, должность и курсы, которые преподает учитель.Я создал частичное представление для отображения информации о курсах для учителя.У меня есть только одна кнопка отправки в главном окне редактирования.Когда я отправляю форму и получаю объект учителя, объект его курсов становится пустым, хотя я обновил поле курса.Может кто-нибудь помочь мне здесь?
public class TeacherTemplate
{
public int teacherId { get; set;}
public string TeacherName { get; set; }
public string TeacherCourses { get; set; }
public CourseTemplate Courses
{
get => TeacherCourses == null ? null : JsonConvert.DeserializeObject<CourseTemplate>(TeacherCourses);
set => TeacherCourses = JsonConvert.SerializeObject(Courses);
}
}
public class CourseTemplate
{
public string CourseName {get; set; }
public int courseId { get; set; }
public bool Active { get; set; }
public Subjects Subject { get; set;}
}
public class Subjects
{
public string SubjectName { get; set; }
}
Основное представление редактирования для учителей
@model TeacherTemplate
@{
ViewBag.Title = "EditTeacher";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.TeacherName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ModuleTitle, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.ModuleTitle, "", new { @class = "text-danger" })
</div>
</div>
@Html.Partial("_editCourse", Model)
@*@Html.Action("EditCourse", "TeacherTemplate", new { teacherTemplate = Model })*@
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Курсы Частичное представление
@model TeacherTemplate
<script src="~/Scripts/jquery-3.3.1.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Courses.CourseName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Courses.CourseName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Courses.CourseName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Courses.Active, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Courses.Active, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Courses.Active, "", new { @class = "text-danger" })
</div>
</div>
<button type="button" id="btnAddSubjects">Add Subject</button>
if (Model.Courses.Subject.Count() > 0)
{
<div id="subjectContainer" class="form-group">
@Html.LabelFor(model => model.Courses.Subject, htmlAttributes: new { @class = "control-label col-md-2" })
@for (var i = 0; i < Model.Courses.Subject.Count(); i++)
{
<div class="col-md-10">
@Html.TextAreaFor(m => m.Courses.Subject[i].SubjectName, new { htmlAttributes = new { @class = "form-control", @cols = 80, @rows = 50 } })
</div>
}
</div>
}
</div>
}
TeacherTemplateController - Здесь, когда вызывается метод EditTeacherПри нажатии кнопки «Отправить» в главном окне объект teacherTemplate правильно связывает всю информацию об учителе, но свойство TeacherCourses и свойство / объект Courses оба имеют значение null.
public ActionResult Index()
{
return View();
}
public ActionResult EditTeacher(Guid teacherTemplateId)
{
var teacherTemplate= _teacherTemplateService.GetTeacherInfo(teacherTemplateId);
return View(teacherTemplate);
}
[HttpPost]
public ActionResult EditTeacher(TeacherTemplate teacherTemplate)
{
if (ModelState.IsValid)
{
var teacherTemplate1 = _teacherTemplateService.UpdateTeacherInfo(teacherTemplate);
return RedirectToAction("EditTeacher", new { teacherTemplateId = teacherTemplate.teacherTemplateId });
}
public ActionResult EditCourse(TeacherTemplate teacherTemplate)
{
return PartialView("_editCourse", teacherTemplate);
}