c# - How to pass collection from view to controller in asp.net MVC4 -
i want pass collection of skills id view controller action, have dropdownlist of skills :
<select name="skills"> <option value="0">java</option> <option value="1">c++</option> <option value="2">fortran</option> <option value="3">asp</option> </select>
i want user can select many skills dropdown , store value in collection ,i.e array, , post array action in controller follow [employee , skills have manytomany relationship]:
[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(); }
how can achieve ,thanks in advance ....
you have quite few options on front end . razor, angular, jquery... simplfy things in following example have used razor view. dont think need pass skills type object need id of selected skills . in example have skills list static / hard coded razor view, ideally should bound backend.
saying lets assume our employee view model follows
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; } }
then our controller (employeecontroller.cs) .(please ignore ef logic after data bound class)
public class employeecontroller : controller { public actionresult index() { return view("employee",new employeeviewmodel()); } [httppost] public actionresult addemp(employeeviewmodel employee) { var idofemployee=addemployee(employee); foreach (var item in employee.selectedskills) { addskill(idofemployee,item); } return view("employee"); } private void addskill(int idofemployee, int skillid) { // ef logic } private int addemployee(employeeviewmodel emp) { // ef logic, id of inserted employee return 0; } }
then our employee.cshtml view
@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"/> }
Comments
Post a Comment