我创建了两个模型,学生和学校以及复合模型StudentSchool。我使用两个不同的部分视图创建一个学生和另一个学校。但是,在我的控制器中,我获得了学生和学校的空值。以下是我的代码:
学生:
Mapper.CreateMap<CourseDomainModel, CourseDTO>()
.ForMember(dest => dest.Email, opt => opt.MapFrom(source => source.TutorDomainModel.Email));
学校:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace LayoutProject.Models
{
public class Student
{
public int studentID { get; set; }
public String firstname { get; set; }
public String lastname { get; set; }
public int year { get; set; }
}
}
复合模型,StudentSchool:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace LayoutProject.Models
{
public class School
{
public int schoolID { get; set; }
public String name { get; set; }
public String add { get; set; }
}
}
PartielViewStudent:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace LayoutProject.Models
{
public class StudentSchool
{
public Student student { get; set; }
public School school { get; set; }
}
}
PartialViewSchool:
@model LayoutProject.Models.Student
<h4>Student</h4>
@Html.LabelFor(d=>d.studentID) : @Html.TextBoxFor(d=>d.studentID)
<br />
@Html.LabelFor(d=>d.firstname) : @Html.TextBoxFor(d=>d.firstname)
<br />
@Html.LabelFor(d=>d.lastname) : @Html.TextBoxFor(d=>d.lastname)
<br />
@Html.LabelFor(d=>d.year) : @Html.TextBoxFor(d=>d.year)
<br />
观点:
@model LayoutProject.Models.School
<h4>School</h4>
@Html.LabelFor(d=>d.schoolID) : @Html.TextBoxFor(d=>d.schoolID)
<br />
@Html.LabelFor(d=>d.name) : @Html.TextBoxFor(d=>d.name)
<br />
@Html.LabelFor(d=>d.add) : @Html.TextBoxFor(d=>d.add)
<br />
控制器:
@{
ViewBag.Title = "StudentSchool";
}
<h2>StudentSchool</h2>
<form action="/Home/CreateStudentSchools" method="post">
@using (Html.BeginForm())
{
@Html.Partial("_PartialViewStudent")
@Html.Partial("_PartialViewSchool")
}
<input id="createSD" type="submit" value="Submit"/>
</form>
知道我在这里可能缺少什么吗?自4天以来一直在这。
答案 0 :(得分:4)
移动你的部分&#39;查看/Views/Shared/EditorTemplates
文件夹并将它们分别重命名为Student.cshtml
和School.cshtml
(以匹配类的名称)。然后在主视图中使用
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.Student)
@Html.EditorFor(m => m.School)
}
您的生成输入现在将包含用于绑定到您的视图模型的正确name
属性,例如name="Student.studentID"
而不是当前name="studentID"
注意:作为替代方案,您可以将HtmlFieldPrefix传递给Partial,如this answer所示。
答案 1 :(得分:-1)
如果您使用不同的模型提供两个部分视图并在一个模型中组合,那么这不是一个好主意。您必须将复合模型的引用传递给部分视图。
@using (Html.BeginForm())
{
@Html.Partial("_PartialViewStudent",Model.student)
@Html.Partial("_PartialViewSchool",Model.school)
}
这种方法可以正常使用,因为表单中的所有内容都是严格键入的。
在部分视图中,您还必须将模型指定为
@model LayoutProject.Models.StudentSchool.student
@model LayoutProject.Models.StudentSchool.school
我不确定你的[httpget]创建方法,但它应该是这样的
[HttpGet]
public ActionResult CreateStudentSchools(StudentSchool ss)
{
var studentsc=new StudentSchool()
{
student=new Student(),
school=new School()
}
return View("CreateStudentSchool",studentsc);
}