Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用ViewModel EF ASP.NET MVC插入一个多个关系数据_C#_Asp.net Mvc_Entity Framework_Ef Code First_Viewmodel - Fatal编程技术网

C# 使用ViewModel EF ASP.NET MVC插入一个多个关系数据

C# 使用ViewModel EF ASP.NET MVC插入一个多个关系数据,c#,asp.net-mvc,entity-framework,ef-code-first,viewmodel,C#,Asp.net Mvc,Entity Framework,Ef Code First,Viewmodel,我试图弄清楚如何使用带有一个回发的viewmodel插入多行数据。我使用EF和代码优先的方法。我遇到问题的模型有一对多关系。我想做的是,无论何时创建一个人,都应该将多个任务与一个人(不同的表)一起保存到数据库中 到目前为止,我只能保存第一项任务,而不是全部任务 我的模型是: public class Person { public Person() { this.Tasks = new List<Task>(); } [Key]

我试图弄清楚如何使用带有一个回发的viewmodel插入多行数据。我使用EF和代码优先的方法。我遇到问题的模型有一对多关系。我想做的是,无论何时创建一个人,都应该将多个任务与一个人(不同的表)一起保存到数据库中

到目前为止,我只能保存第一项任务,而不是全部任务

我的模型是:

public class Person
{
    public Person()
    {
        this.Tasks = new List<Task>();
    }

    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Task> Tasks { get; set; }
}

public class Task
{
    [key]
    public int ID { get; set; }
    public int PersonID { get; set; }
    public string Task { get; set; }

    public virtual Person Person { get; set; }
}
视图:

至少我知道任务正在通过。我尝试了一些类似的事情

foreach (char c in personData.Task.Task.AsEnumerable)
{ count += 1}
并收到了正确数量的号码。我认为使用ViewModels是比较常见的,但我没有看到我想在任何教程或论坛中做什么


我的目标是能够通过一次回发为每个人保存多个任务。任何建议都将不胜感激

在ViewModel中,您只有一个任务,应该是一个任务列表,对吗? 当我做这样的事情时,我通常先保存Person对象,然后使用ajax向其中添加任务

这个方法可能看起来像这样

public void SaveTasks(List<Task> tasks){
    //important that tasks already have personId --set on client side

    foreach(var task in Tasks){
      //do some validation
      db.Tasks.Add(task);
    }
    db.SaveChanges();

}
public void SaveTasks(列出任务){
//重要的是,任务已经在客户端设置了personId
foreach(任务中的var任务){
//做一些验证
db.Tasks.Add(任务);
}
db.SaveChanges();
}

使用JavaScript输出文本框有什么原因吗?这给你带来了一些问题…是的,任务部分是可选的。我实际拥有的是一个包含0-5的下拉列表。基于该值,我将为任务显示适当数量的文本框。我曾想过把所有的文本框都放在那里并隐藏/取消隐藏,但是用jquery生成的文本框看起来更干净。你有没有找到一个公平的解决方案?我遇到了完全相同的情况,我还没有找到描述在单个视图中将数据插入到“子”和“父”表中的文档。很抱歉,我从未使用过ajax,而且对mvc还是很陌生,所以我很困惑。。。也因为我有任务列表中的个人对象。这不应该考虑插入多个任务吗?
    public class PersonController : Controller
    {
       private Context db = new DBContext();

    public ActionResult Create()
    {
       return View();
     }

     [HttpPost]
     public ActionResult Create(ViewModels.PersonData personData) 
    {           
       if (ModelState.IsValid) 
        {
           db.Person.Add(eventData.Person);
           db.Tasks.Add(eventData.Task);
           db.SaveChanges();        

           return RedirectToAction("Index");
        }
        return View();
    }
foreach (char c in personData.Task.Task.AsEnumerable)
{ count += 1}
public void SaveTasks(List<Task> tasks){
    //important that tasks already have personId --set on client side

    foreach(var task in Tasks){
      //do some validation
      db.Tasks.Add(task);
    }
    db.SaveChanges();

}