C# MVC复杂模型绑定到列表<;T>;

C# MVC复杂模型绑定到列表<;T>;,c#,web,model-view-controller,C#,Web,Model View Controller,我是c#MVC的新手,如果可能的话,或者如果有人能给我指出正确的方向,我真的很想得到一些帮助。我已经花了好几个小时在网上寻找解决方案,但我还没有找到任何有用的东西,这就是我为什么在这里发帖的原因 我正在为我的公司创建一个员工数据库web应用程序,例如,我有以下几个类 namespace my_app.Models.Employee { public class Employee { public Employee() { }

我是c#MVC的新手,如果可能的话,或者如果有人能给我指出正确的方向,我真的很想得到一些帮助。我已经花了好几个小时在网上寻找解决方案,但我还没有找到任何有用的东西,这就是我为什么在这里发帖的原因

我正在为我的公司创建一个员工数据库web应用程序,例如,我有以下几个类

namespace my_app.Models.Employee
{
    public class Employee
    {

        public Employee()
        {
        }

        // id
        public int id { get; set; }

        // employee id/payroll no
        public string Employeeid { get; set; }

        // employee qualifications
        public IList<EmployeeQualification> EmployeeQualifications { get; set; }
    }
}


    namespace my_app.Models.Employee
    {
    public class EmployeeQualification
        {
            public EmployeeQualification()
            {
            }

            // employee Qualification id
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }

            // employee Qualification institution

            public string Institution { get; set; }

            // employee Qualification qualificaiton

            public string Qualification { get; set; }

            public IList<Employee> Employees { get; set; }

        }
    }
现在我遇到的问题是,我需要帮助,我希望在视图中显示员工(即姓名、地址等),但也能够列出员工的资格,并能够添加和删除资格

我已经在网上看到了很多关于如何通过AJAX和Entity framework SaveChanges方法实现这一点的教程,我相信这会起作用,但我想做的稍微复杂的部分是,我希望更改保留在客户机上,并且只在提交整个表单(包括对employee对象的任何更改)时才进行然后将更改持久化到数据库中

有没有办法用标准mvc控件实现这一点,或者我需要编写大量JavaScript来将更改保存到本地对象数组中,然后在表单提交中附加其他表单数据

我确实写了一大堆jQuery来让它工作,但问题是我需要在应用程序的多个视图上使用这个功能,每次都要编写那么多代码似乎并不明智


非常感谢您的帮助。

希望我能给您一个前进的方向

首先,你需要改变你的模型设计。基本上,一个员工可以拥有多个资格,一个资格可以由多个员工拥有。所以你们有很多对很多的关系。这意味着您需要3个模型(员工、员工资格、资格)。第二个模型将保存员工和资格的外键


接下来是UI,在只执行1次提交以持久化数据之前,您希望保留UI中的所有更改。就用户友好的系统设计而言,这实际上是一个非常好的想法。为此,您只需要维护一个SelectedQualificationID列表。然后将该列表保存在一个隐藏字段中,这样提交后,您就可以从DB加载所有限定条件,与列表进行比较,并相应地删除/添加限定条件。

如果您还不想将数据发送到DB,请考虑使用cookie、会话、缓存或其他临时保存数据的方式。您可以对同一视图或完全不同的视图执行第二个操作,该操作基于临时数据中的数据构建视图,然后在准备就绪时从该视图持久化到db。
namespace my_app.ViewModels
{
    public class EmployeeViewModel
    {

        public Employee Employee { get; set; }

        // more stuff here
    }
}