asp.net mvc - MVC Radiobutton binding complex object -
asp.net mvc - MVC Radiobutton binding complex object -
i have mvc3 web application need populate radio button list validation. model this:
public class employeesviewmodel { public list<employee> listemployee { get; set; } //to persist during post public ienumerable<selectlistitem> selectlistemployee { get; set; } [required] public employee selectedemployee { get; set; } } public class employee { public int id {get; set;} public string name {get; set} public string section {get; set} } i need populate radiobutton list below:
employee1id - employee1name - employee1department // id - name - department employee2id - employee2name - employee2department employee3id - employee3name - employee3departmentselected employee should stored "selectedemployee" field. best or clean way populate these radio button list in mvc3?
note: looking 2 task: 1. storing "employee" object in each "input" radio button tag, selected employee saved "selectedemployee" field 2. best way mark "employee" object required field
much appreciate help!
thanks,
here's recommend you. start clean view model, 1 expresses view contains information:
public class employeesviewmodel { public list<employeeviewmodel> listemployee { get; set; } [required] public int? selectedemployeeid { get; set; } } public class employeeviewmodel { public int id { get; set; } public string label { get; set; } } then controller:
public class homecontroller : controller { public actionresult index() { var model = new employeesviewmodel { listemployee = getemployees() }; homecoming view(model); } [httppost] public actionresult index(employeesviewmodel model) { if (!modelstate.isvalid) { // model invalid, user didn't select employee // => refetch employee list repository , // redisplay view can prepare errors model.listemployee = getemployees(); homecoming view(model); } // validation passed @ stage // todo: model.selectedemployeeid contain id // of selected employee => utilize repository fetch // actual employee object , // (like grant him employee of month prize :-)) homecoming content("thanks submitting", "text/plain"); } // todo: doesn't belong here // it's demonstration purposes. in real // application have repository, utilize di, ... private list<employeeviewmodel> getemployees() { homecoming new[] { new employeeviewmodel { id = 1, label = "john (hr)" }, new employeeviewmodel { id = 2, label = "peter (it)" }, new employeeviewmodel { id = 3, label = "nathalie (sales)" }, }.tolist(); } } and view:
@model employeesviewmodel @using (html.beginform()) { @html.validationmessagefor(x => x.selectedemployeeid) @foreach (var employee in model.listemployee) { <div> @html.radiobuttonfor(x => x.selectedemployeeid, employee.id, new { id = "emp" + employee.id }) @html.label("emp" + employee.id, employee.label) </div> } <input type="submit" value="ok" /> } asp.net-mvc asp.net-mvc-3 radio-button
Comments
Post a Comment