复合模型不绑定 mvc 3

Composite model not binding mvc 3

我创建了两个模型,Student 和 School,以及一个复合模型 StudentSchool。我正在使用两个不同的部分视图来创建一个学生和另一个学校。但是,在我的控制器中,我得到了学生和学校的空值。下面是我的代码:

学生:

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; }
    }
}

学校:

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; }
    }
}

复合模型,StudentSchool:

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; }
    }
}

PartielViewStudent:

   @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 />

PartialViewSchool:

    @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>

控制器:

 [HttpPost]
        public ActionResult CreateStudentSchools(StudentSchool ss)
        {
            return View("CreateStudentSchool");
        }

知道我在这里可能遗漏了什么吗?从 4 天开始就一直在使用它。

将您的 'partial' 视图移至 /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,如 中所示。

如果您提供两个具有不同模型的局部视图并合并为一个视图,这不是一个好主意model.You必须将复合模型的引用传递给您的局部视图。

 @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); }