Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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# “储蓄”;选择多个";数据库中的值_C#_Asp.net Mvc_Database_Select - Fatal编程技术网

C# “储蓄”;选择多个";数据库中的值

C# “储蓄”;选择多个";数据库中的值,c#,asp.net-mvc,database,select,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) {

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

表格是这样的

@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>
@model-Ability.Models.ViewModel
增加技能
@foreach(Model.Skills中的var技巧)
{
@skill.SkillName
}          
如您所见,他们可以选择多个选项

我的数据库如下所示

现在我想知道如何成功地将数据保存到表单中。我正在考虑使用一个类似

教师/添加技能/1

其中“1”表示教师ID,当然,技能ID通过表格给出

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

期待任何帮助

正如达林所建议的那样

正确的方法是将视图模型与 用于强类型帮助程序的Html.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属性,其中Skills应包含所有可用技能

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

if (selectedSkills != null && selectedSkills.Count > 0)
{
   model.SelectedSkills = selectedSkills.Select(x => x.Value).ToArray();
}
List selectedSkills=service.GetSkillsByTeacherId(教师ID);
if(selectedSkills!=null&&selectedSkills.Count>0)
{
model.SelectedSkills=SelectedSkills.Select(x=>x.Value).ToArray();
}

创建一个映射POST请求值的类。伙计,用
@foreach
语句生成dropdownlist,真的吗?@DarinDimitrov这有什么不对?正确的方法是什么?这个
@Html.ListBoxFor(x=>x.Skills)
有一个helper方法,我不确定foreach本身是否有什么问题,但如果使用helper方法,它可能更干净、更易于维护。我不确定为什么这个问题有两个赞成票,它没有包含足够的信息来回答它。您选择了什么方法与数据库、存储过程、实体框架进行交互?感谢您的回复,我将尝试一下,并让您知道它是如何进行的。很抱歉,我们在编写查询以获得数据库中的所有技能方面遇到了困难。我们正在尝试这样的东西{Skills=(从db.Skills中的s选择s)};但是这显然是错误的,那么我们应该如何编写正确的查询呢?这不是问题,Nicolas。我已经更新了答案,让我知道进展如何。