【发布时间】:2016-04-09 07:40:29
【问题描述】:
我正在学习 asp.net mvc 中的一些概念。我正在使用实体框架和 Visual Studio 2013 社区版。我正在创建一个用于学习的演示应用程序。我根据this 链接创建了模型。型号如下。 下面是课程模型。该课程有部门作为外键。一个系可以有很多课程。
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;
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; }
}
}
有一个上下文类。
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; }
}
}
现在我已经使用了脚手架并创建了具有 CRUD 功能的控制器和视图。我可以在视图中创建部门和课程。现在我需要在创建部门时分配多个课程。所以我创建了一个这个视图模型。这里一个系有很多课程。
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; }
}
}
与此同时,我创建了一个新视图。在创建部门的同时可以接受更多的课程。视图结果是这样的。
加号按钮的脚本来自我之前的问题here。该脚本使用 jquery 并克隆下拉列表并添加回来。
问题从这里开始。当我添加多个下拉菜单时,比如说 3,我在控制器中接收到 null,虽然我接收到三个元素,但只有一个元素具有值,其他元素为 null。有关更多说明,请参见图像。
为什么会这样? PS:我可能会忽略实时场景,因为这是一个演示应用程序,用于学习和清除与实体框架的一对多关系以及使用 MVC 的概念。
【问题讨论】:
-
但在您的情况下,您似乎只希望与下拉列表关联的
CouseId,在这种情况下,您查看模型属性需要为IEnumerable<int> Courses。但是更好的方法是显示每门课程都带有一个关联的复选框,这样用户就可以选择它们(您当前的实现会有其他问题,例如用户可能会选择重复项) -
@StephenMuecke 我在前端进行了测试。该脚本正在添加下拉列表,因此被接受。我正在检查您建议的链接。
-
@StephenMuecke 我理解关于重复的要点。我使用的脚本和您建议的答案不是做同样的事情吗?喜欢使用假索引器添加克隆并更新索引?
-
不,我的意思是用户可以选择课程 1,然后是课程 2,然后是课程 1。但这只是您的实施问题的开始。如果
Course的任何属性具有验证属性,则ModelState将无效。然后又出现了编辑对象的问题。
标签: c# jquery asp.net-mvc asp.net-mvc-4 entity-framework-4