【问题标题】:asp.net mvc 4 code first: How to auto save complex model with lists of models in it?asp.net mvc 4 代码优先:如何自动保存包含模型列表的复杂模型?
【发布时间】:2014-06-19 03:10:02
【问题描述】:

我正在创建一个测验创建器模块。有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; }
}
}

这是我的主题模型:

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

这是截面模型:

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


}
}

这是服从模型:

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

【问题讨论】:

  • 标题中有“自动保存”让我有点困惑。您的意思是要在完成科目时保存每个科目的 20 个问题,还是只是将所有这些问题作为已保存的完整表格的一部分?
  • 看起来您有可以在客户端轻松复制的模型。所以你只需要在客户端保存主题之间的所有数据。
  • @krillgar 我想为每个主题保存 20 个问题。问题将使用 html 复选框属性选择,然后希望最终保存表单,以便使用单个提交按钮保存来自 5 个主题的 100 个问题。
  • @U10,我将能够解析问题,但我需要为每个主题选择 20 个问题,然后想使用单个提交表单保存 100 个问题。
  • 如果您使用 JavaScript 存储数据,则不需要表单本身。当您通过 Ajax 发送数据时,它会自行创建表单。

标签: c# ajax asp.net-mvc-4 razor knockout.js


【解决方案1】:

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

我认为在这种情况下,您最好使用某种 JavaScript 框架,例如 KnockoutJS,只有 很少点击几行代码将允许您将所有数据存储在基于对象的模型中的客户端

不管你是否会使用任何框架,你应该使用 JavaScript 来存储你的所有数据,包括问题、答案和主题。 JavaScript 将允许您存储、验证和发送您需要的所有数据

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

为了让 KnockoutJS 的学习更容易,请使用教程:http://learn.knockoutjs.com

【讨论】:

  • 我应该把我的代码放在这里,以便我可以根据我的项目获得详细的答案吗?我被卡住了!
  • 当然!我想我们可以为您选择正确的解决方案。
  • 但你也应该先看看 KnockoutJS
  • 我将开始研究knockoutJS。但是knockoutJS 使用MVVM 吗?还是 MVC?
  • KnockoutJS 使用 MVVM,因为它更简单,不需要像 MVC 那样大的基础设施。
【解决方案2】:

这就是我要尝试的方式。

业务规则: - 如果所有科目的问题都由某个用户提交,则完整的模型测试将完成。

假设:我们事先知道我们有五个主题。因此

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 在您的
问题上下文中最适合您的方式来实现它以自动保存更改
您将使用适当的验证注释/属性添加必要的视图模型
您将在必要时添加验证。
您将添加/更新测试实体。就像第一个主题一样,您将数据添加到测试实体中,然后您将对其进行更新。

希望对你有帮助

【讨论】:

  • 我可以给您邮寄或给您发送我的代码吗?我有用于考试类型条目、主题条目、部分条目和子部分条目的模型和视图。因此,我可以创建许多类型、许多主题、许多部分和小节。我设计了模块。如何共享我的代码并获得有用的答案?我被这个困住了。
猜你喜欢
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2013-05-26
相关资源
最近更新 更多