C# asp.NETMVC4代码优先:如何自动保存包含模型列表的复杂模型?
我正在创建一个测验创建者模块。共有5个科目。每个科目有2000个问题 比如说,它被称为“创建完整的模型测试”,它将包含100个问题,来自5个科目的20个问题。所以,20*5=100 在UI中,创建者将首先从下拉列表中选择“创建完整模型测试”。假设他选择了“全模型测试”。他必须从5个科目中选择一个科目,然后他必须为每个科目选择20个问题。然后必须将它们保存到“完整模型测试”部分 如果他选择英语,他将不得不选择20个问题,然后他将不得不选择另一门学科,例如物理,他将不得不选择另外20个物理问题,然后他将不得不选择数学,然后不得不选择另外20个数学问题,依此类推。最后,表格将提交100个问题 现在,我的问题是,我如何将所选的问题自动保存到“完整模型测试”部分,以便他可以在提交表单之前继续保存5个受试者的问题 这是我的部门模型:C# asp.NETMVC4代码优先:如何自动保存包含模型列表的复杂模型?,c#,ajax,asp.net-mvc-4,razor,knockout.js,C#,Ajax,Asp.net Mvc 4,Razor,Knockout.js,我正在创建一个测验创建者模块。共有5个科目。每个科目有2000个问题 比如说,它被称为“创建完整的模型测试”,它将包含100个问题,来自5个科目的20个问题。所以,20*5=100 在UI中,创建者将首先从下拉列表中选择“创建完整模型测试”。假设他选择了“全模型测试”。他必须从5个科目中选择一个科目,然后他必须为每个科目选择20个问题。然后必须将它们保存到“完整模型测试”部分 如果他选择英语,他将不得不选择20个问题,然后他将不得不选择另一门学科,例如物理,他将不得不选择另外20个物理问题,然后
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; }
}
}
以下是隶属模型:
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; }
}
}
您所需要的只是在客户端存储所有临时数据。 当您获得完整的过去,甚至是完整的数据集时,使用POST/JSON/XML/etc将其发送到服务器 我认为在这种情况下,您最好使用某种JavaScript框架,例如,只需点击几下,和几行代码,就可以将所有数据以基于对象的模型存储在客户端 不管怎样,无论您是否使用任何框架,您都应该使用JavaScript来存储所有数据,包括问题、答案和主题。JavaScript将允许您存储、验证和发送所需的所有数据 为了使JavaScript的使用更简单、更快,您可以使用库,其中包含与DOM结构和服务器端交互的函数
为了使学习KnockoutJS更容易,只需使用教程:这就是我将尝试的方法 业务规则: -如果所有主题问题都由某个用户提交,则完整的模型测试将完成 假设:我们事先知道我们有五个科目。所以
public enum Subject
{
English,
Physics,
...
}
测试Poco实体结构:
public class Test
{
public int Id{get;set;}
public User CreatedBy{get;set;}
public Subject Subject{get;set;}
public bool IsFullTestCompleted{get;set;}
public string Question1{get;set;}
public string Question2{get;set;}
...
}
假设:您可以使用局部视图/ajax/Jquery/Angularjs/Knockout,在您的
问题上下文中,使用任何最适合您的方法来实现它,以自动保存更改
您将添加必要的视图模型和适当的验证注释/属性
您将在必要时添加验证。
您将添加/更新测试实体。和第一个主题一样,您将把数据添加到测试实体中,然后更新它
希望能有所帮助标题中的“自动保存”让我有点困惑。您的意思是,您希望在完成主题时保存每个主题的20个问题,还是将所有这些问题作为保存的完整表单的一部分?看起来您有一个模型,可以轻松地在客户端复制。所以您只需要在客户端保存主题之间的所有数据。@krillgar我想为每个主题保存20个问题。将使用html复选框属性选择问题,然后希望最终保存表单,以便使用单个提交按钮保存来自5个主题的100个问题。@U10,我将能够解析问题,但我需要为每个主题选择20个问题,然后使用一个提交表单保存100个问题。如果您存储的数据是JavaScript,则不需要表单本身。当您通过Ajax发送数据时,它将自行创建表单。我可以将我的代码发送给您吗?我有考试类型条目、科目条目、部分条目和子部分条目的模型和视图。因此,我可以创建许多类型,许多主题,有许多部分和小节。我已经设计了模块。如何共享代码并获得有用的答案?我被困在这里。我应该把我的代码放在这里,这样我就可以根据我的项目得到一个详细的答案吗?我被卡住了!当然我认为我们可以为您选择正确的解决方案。但您也应该先看一下knockoutJS。我将开始看knockoutJS。但是knockoutJS是否使用MVVM?或者MVC?KnockoutJS使用MVVM,因为它更简单,不需要像MVC那样的大型基础设施。
public enum Subject
{
English,
Physics,
...
}
public class Test
{
public int Id{get;set;}
public User CreatedBy{get;set;}
public Subject Subject{get;set;}
public bool IsFullTestCompleted{get;set;}
public string Question1{get;set;}
public string Question2{get;set;}
...
}