【问题标题】:How to receive dynamically added values from view to controller in ASP.NET MVC?如何在 ASP.NET MVC 中接收从视图到控制器的动态添加值?
【发布时间】: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 的概念。

【问题讨论】:

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

标签: c# jquery asp.net-mvc asp.net-mvc-4 entity-framework-4


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多