【问题标题】:How to Insert multiple input with same name to database?如何将具有相同名称的多个输入插入数据库?
【发布时间】:2017-11-25 04:32:17
【问题描述】:

我想用实体框架插入多个同名输入。 我试试这个,但不行

型号

public class Skill
    {
       [Key]
        public int skill_id { get; set; }


        public string skill_name { get; set; }
    }

查看

@model WebApplication1.Models.Skill

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()


    <input type="text" name="skill_name[0]" id="skill_name[0]" />

    <input type="text" name="skill_name[1]" id="skill_name[1]" />

    <input type="submit" value="Submit" />

}

控制器

ProductContext db = new ProductContext();

[HttpPost]
    public ActionResult Save(IList<Skill> skills)
    {
        foreach (var item in skills)
        {
            db.Skills.Add(skills);
            db.SaveChanges();
        }
        return RedirectToAction("index");
    }

数据库上下文

public class ProductContext : DbContext
    {
        public DbSet<Skill> Skills { get; set; }
    }

我该怎么办? 我发现这个 https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ 但是本教程没有用于插入的控制器示例

【问题讨论】:

  • 您的模型不包含名为 Skills 的属性。你想绑定什么(你的代码没有意义)。您的模型不包含集合项,无论如何您只保存一个对象。
  • 技能来自dbContext中的dbSet
  • 我知道!但是你想在这里做什么 - 插入多个 Skill 实例?
  • 将多个实例插入到表 Skill 中的“skill_name”字段
  • 我建议您详细阅读this answer 以了解如何生成视图并绑定到集合。如果您想动态添加(和删除)项目,请参考this answer

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


【解决方案1】:

改变

public string skill_name { get; set; }

public string[] skill_name { get; set; }

然后将Save的动作方法改成如下

[HttpPost]
public ActionResult Save(Skill skills)
{
    foreach (var skillName in skills.skill_name)
    { 
       Skill skill = new Skill(); 
       skill.skill_name = skillName;     
       db.Skills.Add(skill);
       db.SaveChanges();
    }
  return RedirectToAction("index");
}

【讨论】:

    猜你喜欢
    • 2017-08-03
    • 2018-12-29
    • 2017-03-20
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多