复合模型不绑定mvc 3

时间:2015-10-01 06:33:06

标签: asp.net-mvc models asp.net-mvc-partialview

我创建了两个模型,学生和学校以及复合模型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天以来一直在这。

2 个答案:

答案 0 :(得分:4)

移动你的部分&#39;查看/Views/Shared/EditorTemplates文件夹并将它们分别重命名为Student.cshtmlSchool.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); }