C# 如何在ASP.NET MVC中接收从视图到控制器的动态添加值?

C# 如何在ASP.NET MVC中接收从视图到控制器的动态添加值?,c#,jquery,asp.net-mvc,asp.net-mvc-4,entity-framework-4,C#,Jquery,Asp.net Mvc,Asp.net Mvc 4,Entity Framework 4,我正在学习asp.NETMVC中的一些概念。我正在使用实体框架和visual studio 2013社区版。我正在创建一个用于学习的演示应用程序。我已经根据链接创建了模型。模型如下。 以下是课程模式。本课程以系为外键。一个系可以有很多课程 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace ManyItemsDemo2.Models { publ

我正在学习asp.NETMVC中的一些概念。我正在使用实体框架和visual studio 2013社区版。我正在创建一个用于学习的演示应用程序。我已经根据链接创建了模型。模型如下。 以下是课程模式。本课程以系为外键。一个系可以有很多课程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ManyItemsDemo2.Models
{  
    public class Course
    {
        public int CourseID { get; set; }
        public string Title { get; set; }
        public string Credits { get; set; }
        public int DepartmentID { get; set; }

        public virtual Department Department { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ManyItemsDemo2.Models;

namespace ManyItemsDemo2.ViewModels
{
    public class DeptCourses
    {
        public Department Department { get; set; }
        public IEnumerable<Course> Course { get; set; }
    }

}
这是部门模式。部门模式很简单。它与课程模型相关联

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ManyItemsDemo2.Models
{
    public class Department
    {
        public Department()
        {
            this.Cources = new HashSet<Course>();
        }
        public int DepartmentID { get; set; }
        public string Name { get; set; }
        public double Budget { get; set; }
        public string Administrator { get; set; }

        public virtual ICollection<Course> Cources { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
名称空间ManyItemsDemo2.Models
{
公共课系
{
公共部门()
{
this.Cources=new HashSet();
}
public int DepartmentID{get;set;}
公共字符串名称{get;set;}
公共双预算{get;set;}
公共字符串管理器{get;set;}
公共虚拟ICollection Cources{get;set;}
}
}
有一个上下文类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;

namespace ManyItemsDemo2.Models
{
    public class SchoolContext:DbContext
    {
        public SchoolContext() : base("SchoolContext") { }

        public DbSet<Course> Courses { get; set; }
        public DbSet<Department> Departments { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Data.Entity;
名称空间ManyItemsDemo2.Models
{
公共课堂背景:DbContext
{
公共学校上下文():基本(“学校上下文”){}
公共数据库集课程{get;set;}
公共数据库集部门{get;set;}
}
}
现在我已经使用scafolding并创建了具有CRUD功能的控制器和视图。我可以在视图中创建部门和课程。现在,我需要在创建部门时分配多个课程。所以我创建了一个这个视图模型。这里有一个系有许多课程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ManyItemsDemo2.Models
{  
    public class Course
    {
        public int CourseID { get; set; }
        public string Title { get; set; }
        public string Credits { get; set; }
        public int DepartmentID { get; set; }

        public virtual Department Department { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ManyItemsDemo2.Models;

namespace ManyItemsDemo2.ViewModels
{
    public class DeptCourses
    {
        public Department Department { get; set; }
        public IEnumerable<Course> Course { get; set; }
    }

}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用多个模型;
命名空间ManyItemsDemo2.ViewModels
{
公营部门
{
公共部门部门{get;set;}
公共IEnumerable课程{get;set;}
}
}
同时,我创建了一个新的视图。在创建部门时可以接受更多的资源。查看结果如下所示

加号按钮有一个脚本,来自我前面的问题。该脚本使用jquery并克隆下拉列表并进行添加

问题从这里开始。当我添加多个下拉列表时,比如说3,我在控制器中接收到null,虽然我接收到三个元素,但只有一个元素有值,其他元素为null。有关更多说明,请参见图

为什么会发生这种情况?
PS:我可能忽略了实时场景,因为这是一个演示应用程序,用于学习和澄清与实体框架以及使用MVC的一对多关系的概念

为我工作。只是更改了脚本中的名称,并在httppost中添加了字符串数组。

不知道为什么您接受了上一个问题中的答案,而它根本不可能起作用。它创建的表单控件与模型完全没有关系。参考答案和一些选项,但在您的情况下,您似乎只需要与dropdownlist关联的
CouseId
,在这种情况下,您查看模型属性需要是
IEnumerable Courses
。但是更好的方法是显示每个课程,并带有一个相关的复选框,这样用户就可以选择它们(您当前的实现可能会有其他问题,例如用户可能会选择重复的课程)@StephenMuecke我在前端进行了测试。该脚本正在添加下拉列表,因此被接受。我正在检查你建议的链接。@StephenMuecke我理解复制的意义。我用的剧本和你建议的答案不一样吗?比如添加一个带有假索引器的克隆并更新索引?不,我的意思是用户可以选择课程1,然后是课程2,然后是课程1。但这只是您的实现问题的开始。如果
课程
的任何属性具有验证属性,
ModelState
将无效。然后是再次编辑对象的问题。