我有教师可以从中选择多个选项(每个选项代表他们拥有的技能)。
表格看起来像这样
@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>
如您所见,他们可以选择多个选项。
我的数据库看起来像这样
现在我想知道如何在表单中成功保存数据。我在考虑使用看起来像
的网址教师/ addskills / 1
其中“1”代表Teacher_ID,当然,通过表格给出skill_ID。
我的问题是,如何将多个值传递给我的控制器并将其正确保存在我的数据库中?
期待任何帮助!
答案 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();
}