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

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -