在数据库中保存“选择多个”值

时间:2016-01-04 13:52:08

标签: c# asp.net-mvc database select

我有教师可以从中选择多个选项(每个选项代表他们拥有的技能)。

表格看起来像这样

@model Ability.Models.ViewModel

<h2>Add Skill</h2>

<form action="" method="post">
    <select multiple name="AddSkillForm">
        @foreach (var skill in Model.Skills)
        {
            <option value="@skill.ID">@skill.SkillName</option>
        }          
    </select>
</form>

如您所见,他们可以选择多个选项。

我的数据库看起来像这样

enter image description here

现在我想知道如何在表单中成功保存数据。我在考虑使用看起来像

的网址
  

教师/ addskills / 1

其中“1”代表Teacher_ID,当然,通过表格给出skill_ID。

我的问题是,如何将多个值传递给我的控制器并将其正确保存在我的数据库中?

期待任何帮助!

1 个答案:

答案 0 :(得分:1)

达林建议。

  

正确的方法是结合使用视图模型   Html.ListBoxFor强类型助手

我会使用多选ListBox。模型绑定器将负责其余部分。

模型视图

        public class MyModelView
        {
           public IEnumerable<SelectListItem> Skills{ get; set; }
           public string[] SelectedSkills { get; set; } // You could use      List<string> instead. 
           public int TeacherId {get;set;}
        }

查看

     @Html.ListBoxFor(s => s.SelectedSkills , 
    new MultiSelectList(Model.Skills, "Value", "Text", Model.SelectedSkills ), 
    new { @class = "form-control", style = "height:250px; width:100%" })
     @Html.HiddenFor(s => s.TeacherId)

<强>控制器

 [HttpPost]
     public ActionResult Save(MyModelView model)
     {
       foreach (string skill in model.SelectedSkills){//Selected Skills. Save to database}
     }

修改

从数据库中获取技能。根据您的数据库结构,您应该能够从桥接表“TeacherSkills”获得每位教师的所有技能。您需要填写SelectedSkills属性,其中技能应具备所有可用技能。

 List<SelectListItem> selectedSkills= service.GetSkillsByTeacherId(teacherId);

if (selectedSkills != null && selectedSkills.Count > 0)
{
   model.SelectedSkills = selectedSkills.Select(x => x.Value).ToArray();
}