【问题标题】:Saving "Select Multiple" values in a database在数据库中保存“选择多个”值
【发布时间】:2016-04-08 03:45:27
【问题描述】:

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

表格是这样的

@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 是通过表格给出的。

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

期待任何帮助!

【问题讨论】:

  • 创建一个映射您的 POST 请求值的类。
  • 老兄,用@foreach 语句生成一个下拉列表,认真的吗?
  • @DarinDimitrov 怎么了?正确的做法是什么?
  • 这个@Html.ListBoxFor(x =&gt; x.Skills)有一个辅助方法我不确定这个本身的foreach有什么问题,但如果它可能更清洁和更易于维护你使用辅助方法。
  • 我不知道为什么这个问题有 2 票赞成,它没有包含足够的信息来回答它。您选择了哪种方法与数据库、存储过程、实体框架进行交互?

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


【解决方案1】:

正如达林建议的那样。

正确的方法是将视图模型与 Html.ListBoxFor 强类型助手

我会使用多选列表框。模型绑定器将负责其余的工作。

模型视图

        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 属性,其中 Skills 应该具有所有可用技能。

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

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

【讨论】:

  • 感谢您的回复,我会尝试一下并告诉您进展如何
  • 很抱歉,我们在编写查询以从数据库中获取所有技能时遇到问题。我们正在尝试这样的事情 { Skills = (from s in db.Skills select s) };但这显然是错误的,那我们应该如何编写正确的查询呢?
  • 尼古拉斯没问题。我已经更新了答案,请告诉我进展如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2020-12-18
  • 2010-12-02
  • 2018-11-26
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多