Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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# 如何在asp.net MVC4中将集合从视图传递到控制器_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Entity Framework 6 - Fatal编程技术网

C# 如何在asp.net MVC4中将集合从视图传递到控制器

C# 如何在asp.net MVC4中将集合从视图传递到控制器,c#,asp.net,asp.net-mvc,asp.net-mvc-4,entity-framework-6,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Entity Framework 6,我想将一组技能id从我的视图传递到控制器操作,我有一个技能下拉列表: <select name="skills"> <option value="0">Java</option> <option value="1">C++</option> <option value="2">Fortran</option>

我想将一组技能id从我的视图传递到控制器操作,我有一个技能下拉列表:

         <select name="skills">
           <option value="0">Java</option>
           <option value="1">C++</option>
           <option value="2">Fortran</option>
           <option value="3">ASP</option>
         </select>

JAVA
C++
Fortran
ASP
我希望用户可以从下拉列表中选择许多技能,并将其值存储在一个集合中,即数组中,然后将该数组发布到controller中的操作中,如下所示[员工和技能之间存在多人关系]:

 [HttpPost]
 public ActionResult AddEmp(Employee emp ,IEnumerable<Skills> skills )

 {

   DBCtx db=new DbCtx();
   db.employees.Add(emp);
   var emp_id=db.SaveChanges();

   var employee=db.employees.Find(emp_id);

   foreach(item in skills)
   {
      var skill = db.skills.Find(item);
      employee.skills.Add(skill);
   }
   db.SaveChanges();

   return View();
   } 
[HttpPost]
公共行动结果附录(员工emp、IEnumerable skills)
{
DBCtx db=新的DBCtx();
db.employees.Add(环境管理计划);
var emp_id=db.SaveChanges();
var employee=db.employees.Find(emp_id);
foreach(技能中的项目)
{
var skill=db.skills.Find(项目);
employee.skills.Add(skill);
}
db.SaveChanges();
返回视图();
} 

我怎样才能做到这一点,提前感谢….

您在前端有很多选择。剃刀,角度,Jquery。。。为了简化以下示例中的内容,我使用了Razor视图。我认为您不需要将技能作为强类型对象传递,因为您只需要所选技能的Id。同样在这个示例中,我将技能列表静态/硬编码到razor视图中,理想情况下,它应该从后端绑定

这么说,让我们假设我们的员工视图模型如下

 public class EmployeeViewModel
    {
        public EmployeeViewModel()
        {
            SelectedSkills=new List<int>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public List<int> SelectedSkills { get; set; }
    }


   public class Skills
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
然后我们的Employee.cshtml视图可以是

@using System.Web.UI.WebControls
@using WebApplication4.Controllers
@model  WebApplication4.Controllers.EmployeeViewModel
@{
    ViewBag.Title = "Employee";
}

<h2>Employee</h2>

@{var listItems = new List<Skills>
  {
      new Skills { Id = 0,Name="Java" },
      new Skills { Id = 1,Name="C++" },
      new Skills { Id = 2,Name="Fortran" }
  };
}
@using (Html.BeginForm("AddEmp", "Employee"))
{
    @Html.TextBoxFor(m => m.Name, new { autofocus = "New Employee" })
    <br/>
    @Html.ListBoxFor(m => m.SelectedSkills,
        new MultiSelectList(listItems, "Id", "Name",@Model.SelectedSkills)
        , new { Multiple = "multiple" })
    <input type="submit" value="Submit" class="submit"/>
}
@使用System.Web.UI.WebControls
@使用WebApplication4.Controller
@模型WebApplication4.Controllers.EmployeeViewModel
@{
ViewBag.Title=“员工”;
}
雇员
@{var listItems=新列表
{
新技能{Id=0,Name=“Java”},
新技能{Id=1,Name=“C++”},
新技能{Id=2,Name=“Fortran”}
};
}
@使用(Html.BeginForm(“addamp”、“Employee”))
{
@TextBoxFor(m=>m.Name,新{autofocus=“new Employee”})

@Html.ListBoxFor(m=>m.SelectedSkills, 新的多选列表(列表项,“Id”、“名称”、@Model.SelectedSkills) ,新的{Multiple=“Multiple”}) }
前端的选项非常少。剃刀,角度,Jquery。。。为了简化以下示例中的内容,我使用了Razor视图。我认为您不需要将技能作为强类型对象传递,因为您只需要所选技能的Id。同样在这个示例中,我将技能列表静态/硬编码到razor视图中,理想情况下,它应该从后端绑定

这么说,让我们假设我们的员工视图模型如下

 public class EmployeeViewModel
    {
        public EmployeeViewModel()
        {
            SelectedSkills=new List<int>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public List<int> SelectedSkills { get; set; }
    }


   public class Skills
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
然后我们的Employee.cshtml视图可以是

@using System.Web.UI.WebControls
@using WebApplication4.Controllers
@model  WebApplication4.Controllers.EmployeeViewModel
@{
    ViewBag.Title = "Employee";
}

<h2>Employee</h2>

@{var listItems = new List<Skills>
  {
      new Skills { Id = 0,Name="Java" },
      new Skills { Id = 1,Name="C++" },
      new Skills { Id = 2,Name="Fortran" }
  };
}
@using (Html.BeginForm("AddEmp", "Employee"))
{
    @Html.TextBoxFor(m => m.Name, new { autofocus = "New Employee" })
    <br/>
    @Html.ListBoxFor(m => m.SelectedSkills,
        new MultiSelectList(listItems, "Id", "Name",@Model.SelectedSkills)
        , new { Multiple = "multiple" })
    <input type="submit" value="Submit" class="submit"/>
}
@使用System.Web.UI.WebControls
@使用WebApplication4.Controller
@模型WebApplication4.Controllers.EmployeeViewModel
@{
ViewBag.Title=“员工”;
}
雇员
@{var listItems=新列表
{
新技能{Id=0,Name=“Java”},
新技能{Id=1,Name=“C++”},
新技能{Id=2,Name=“Fortran”}
};
}
@使用(Html.BeginForm(“addamp”、“Employee”))
{
@TextBoxFor(m=>m.Name,新{autofocus=“new Employee”})

@Html.ListBoxFor(m=>m.SelectedSkills, 新的多选列表(列表项,“Id”、“名称”、@Model.SelectedSkills) ,新的{Multiple=“Multiple”}) }
A只回发一个值-所选选项的值,您的方法需要是
public ActionResult addamp(int-EmpSkills)
才能与表单控件的名称匹配。但你为什么要这么做。使用一个模型并使用强类型
HtmlHelper
方法绑定到您的模型(如果您想发布多个值,则dropdownlist需要
multiple
属性)@StephenMuecke我想知道如何将其绑定到视图中的模型…您还没有显示您的模型!您需要一个具有
IEnumerable SelectedSkills
IEnumerable SkillsList
的视图模型,并且在视图
@Html.DropDownListFor(m=>m.SelectedSkills,model.SkillsList)
(或者对于多选,然后是
列表框for(m=>m.SelectedSkills,model.SkillsList)
A只回发一个值-所选选项的值,您的方法需要是
public ActionResult addamp(int-EmpSkills)
才能与表单控件的名称匹配。但为什么要这样做呢?使用模型并使用强类型
HtmlHelper
方法绑定到模型(如果要发布多个值,则dropdownlist需要
multiple
属性)@StephenMuecke我想知道如何将其与视图中的模型绑定……您还没有显示您的模型!您需要一个视图模型,其中包含
IEnumerable SelectedSkills
IEnumerable SkillsList
以及视图中的
@Html.DropDownListFor(m=>m.SelectedSkills,model.SkillsList)
(或对于多选,则
ListBoxFor(m=>m.SelectedSkills,Model.SkillsList)
但是它如何从上面的Razore视图中选择多个技能尝试运行此示例。它将呈现为一个选择列表,该列表将填充列表并允许您在其中选择多个项目。它将呈现为一个选择元素。它可以正常工作,但存在一个问题,需要按住Ctrl键来选择多个项目,我如何放置che勾选列表中每个项目的复选框…是的。这是预期行为。您需要搜索如何在下拉列表中放置复选框或创建复选框列表。我相信这是另一个问题。请不要忘记标记为答案。没问题。请不要忘了将上面的答案标记为解决方案。您只需将答案标记为正确(绿色复选框图像)。因此,每个人都知道这解决了问题,但它如何从上面的Razore视图中选择多个技能尝试运行此示例。它将呈现为一个选择列表,该列表将填充列表并允许您在其中选择多个项目。它将呈现为一个选择元素。它工作正常,但存在一个问题,需要按住Ctrl键to选择多个项目,如何在列表中选择每个项目时设置复选框…是的。这是预期行为