asp.net mvc 4代码优先:如何使用模型列表自动保存复杂模型?

Ins*_*rbo 4 c# ajax razor asp.net-mvc-4 knockout.js

我正在创建一个测验创建者模块.有5个科目.每个科目都有2000个问题.

比如,它被称为"创建完整模型测试",它将包含100个问题,来自5个科目的20个问题.所以,20*5 = 100

在UI中,创建者将首先从下拉列表中选择"创建完整模型测试".假设他选择了"完整模型测试".他将不得不在5个科目中选择一个科目,然后他将不得不为每个科目选择20个问题.然后必须将它们保存到"完整模型测试"部分.

如果他选择英语,他将不得不选择20个问题,然后他将不得不选择另一个主题,例如物理,并且将不得不为物理选择另外20个问题,然后他将不得不选择数学,然后必须选择另外20个问题,依此类推数学.最后,表格将提交100个问题.

现在,我的问题是,如何将选定的问题自动保存到"完整模型测试"部分,以便他可以在提交表单之前继续保存5个主题的问题.

这是我的部门模型:

namespace MvcBCS.Models
{
public class Department
{
    [Key]
    public int DepartmentId { get; set; }
    public string DepartmentName { get; set; }
    public string DepartmentCode { get; set; }

    public virtual ICollection<Subject> Subject { get; set; }
    public virtual ICollection<Section> Section { get; set; }
    public virtual ICollection<Subsection> Subsection { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)

这是我的主题模型:

namespace MvcBCS.Models
{
public class Subject
{
    [Key]
    public int SubjectId { get; set; }
    public string SubjectName { get; set; }
    public string SubjectCode { get; set; }

    public int DepartmentId { get; set; }
    public virtual Department Department { get; set; }

    public virtual ICollection<Section> Section { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)

这是剖面模型:

namespace MvcBCS.Models
{
public class Section
{

    [ForeignKey("Department")]
    public int? DepartmentId { get; set; }
    public virtual Department Department { get; set; }

    [ForeignKey("Subject")]
    public int? SubjectId { get; set; }
    public virtual Subject Subject { get; set; }

    [Key]

    public int SectionId { get; set; }

    public string SectionName { get; set; }


}
}
Run Code Online (Sandbox Code Playgroud)

这是下属模型:

namespace MvcBCS.Models
{
public class Subsection
{

    [ForeignKey("Department")]
    public int? DepartmentId { get; set; }
    public virtual Department Department { get; set; }

    [ForeignKey("Subject")]
    public int? SubjectId { get; set; }
    public virtual Subject Subject { get; set; }

    [ForeignKey("Section")]
    public int? SectionId { get; set; }

    public virtual Section Section { get; set; }

    [Key]
    public int SubsectionId { get; set; }
    public string SubsectionName { get; set; }
    public string SubsectionCode { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)

Dmi*_*ets 8

您只需将所有临时数据存储在客户端即可.当您获得完整的过去甚至完整的数据集 - 使用POST/JSON/XML /等将其发送到服务器.

我认为这样的情况下你会更好地使用某种JavaScript框架,例如KnockoutJS,它只需要很少的点击几行代码就可以让你在客户端存储基于对象的模型中的所有数据.

无论如何,如果您将使用任何框架,您应该使用JavaScript来存储您的所有数据,包括问题,答案和主题.JavaScript将允许您存储,验证和发送您需要的所有数据.

为了使您的JavaScript工作更轻松,更快 - 您可以使用包含与DOM结构和服务器端交互的函数的jQuery库.

要更轻松地学习KnockoutJS,请使用教程:http://learn.knockoutjs.com